0

该项目首先使用实体​​框架代码。

我有一个Department用布尔值调用的实体,它指定它是否是活动部门。这是实体定义的简化版本。该Active属性也没有流畅的映射。

public class Department
{
    public Guid DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public bool Active { get; set; }
}

在数据库中,for 的列Activebit, not null.

我们在数据库中有一个默认约束,用于Active将新创建的条目设置为 true。

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

问题是,当我创建一个新实体时,用户可以选择设置Active为false,但是这个属性在添加到上下文时是false,但是在调用save changes之后,该属性是true并且在数据库中是true记录。

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 的列上使用的设置或注释?

4

1 回答 1

2

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

实体框架不会尝试将值持久保存到数据库,这就是设置默认值的原因。

于 2016-02-17T13:52:39.513 回答