插入新实体时如何覆盖布尔值的 SQL 服务器默认值约束?

How to override SQL Server default value constraint on a boolean when inserting new entity?

此项目使用 Entity Framework 代码优先。

我有一个名为 Department 的实体,其布尔值指定它是否是活动部门。这是实体定义的简化版本。 Active 属性.

也没有流畅的映射
public class Department
{
    public Guid DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public bool Active { get; set; }
}

在数据库中,Active 的列是 bit, not null

我们在数据库中为 Active 列设置了默认约束,以将新创建​​的条目设置为 true。

ALTER TABLE [dbo].[Department] ADD  DEFAULT ((1)) FOR [Active]

问题是,当我创建一个新实体时,用户可以选择将 Active 设置为 false,但是这个 属性 在添加到上下文时是 false,但在保存更改后调用时,属性为真,在数据库记录中为真。

Guid ICommonRepository.AddDepartment(Department newDepartment)
{
    using(var db = new CommonDbContext())
    {
        if(newDepartment.DepartmentId == Guid.Empty)
        {
            newDepartment.DepartmentId = Guid.NewGuid();
        }
        db.Departments.Add(newDepartment); // Here newDepartment.Active is false
        db.SaveChanges();
        return newDepartment.DepartmentId; // Here newDepartment.Active is true
    }
}

EF 中是否有我可以在 Active 列上使用的允许我指定 false 的设置或注释?

从模型的 Active 字段中删除 [DatabaseGenerated(DatabaseGeneratedOption.Computed)]

Entity Framework 不会尝试将值保存到数据库,这就是设置默认值的原因。