在实体框架数据库优先方法中将默认值 1 设置为实体名称(状态)
Posted
技术标签:
【中文标题】在实体框架数据库优先方法中将默认值 1 设置为实体名称(状态)【英文标题】:Set Default Value 1 to an EntityName (Status) in Entity Framework database-first approach 【发布时间】:2016-06-09 09:14:50 【问题描述】:我使用的是 Entity Framework 5.0,我已在我的后端数据库中将 Status
列的默认值设置为 1。但是在插入新记录时,它默认为status
列生成0。我希望 1
作为数据库中设置的默认值,但 Entity Framework 将其更改为 0。
【问题讨论】:
【参考方案1】:您必须打开edmx
文件并从相应实体中选择Status
属性。然后按F4
显示Property-View
。您必须为StoreGeneratedPattern
选择Identity
。 Itentity
表示数据库在INSERT
上生成值,而不是在UPDATE
上生成值。
【讨论】:
“不支持使用“身份”模式修改列。列:“状态”。表:“lamiModel.Store.finish”。” 这就是我得到的例外当我尝试更新一个 storedGenaratedPattern= Identity 时。你的伎俩不起作用 我认为该列是只读的,仅由数据库设置。 它在惰性化 1 但更新为 0 时出现异常【参考方案2】:如果您通过实体框架以外的方式插入记录,或者如果您在已包含记录的表上创建新的非空列,则在数据库中设置默认值很有用。 在 Code First 中,您可以在迁移中指定数据库默认值:
public override void Up()
AddColumn("dbo.Foos", "Status", c => c.Integer(nullable: false, defaultValue: 1));
C# 默认将整数设置为零,这就是 Entity Framework 覆盖数据库的原因。
因此,如果实体类不是该类型的默认值,您还必须在实体类中设置默认值:
//partial is only necessary in Database First
public partial class Foo
private int _Status = 1;
public int Status
get return _Status;
set _Status = value;
...或者如果您更喜欢构造函数初始化:
public partial class Foo
public Foo()
Status = 1;
public int Status get; set;
...而且,如果您使用的是 C# 6.0:
public partial class Foo
public int Status get; set; = 1;
【讨论】:
如果我必须编写 7 到 10 行代码来设置默认值,为什么我不应该只插入 obj.Status=1;达到目的 为了使其成为默认值,您应该将该行放在构造函数中。构造函数初始化与支持字段初始化取决于您。我的 IDE 中的重构工具使创建支持字段变得非常简单以上是关于在实体框架数据库优先方法中将默认值 1 设置为实体名称(状态)的主要内容,如果未能解决你的问题,请参考以下文章
EF 6.X 中的实体框架代码优先 Fluent API 默认值