插入新实体时如何覆盖布尔值的 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 不会尝试将值保存到数据库,这就是设置默认值的原因。
此项目使用 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 不会尝试将值保存到数据库,这就是设置默认值的原因。