【发布时间】:2016-06-09 09:14:50
【问题描述】:
我使用的是 Entity Framework 5.0,我已在我的后端数据库中将 Status 列的默认值设置为 1。但是在插入新记录时,它默认为status 列生成0。我希望 1 作为数据库中设置的默认值,但 Entity Framework 将其更改为 0。
【问题讨论】:
标签: c# asp.net entity-framework entity-framework-5
我使用的是 Entity Framework 5.0,我已在我的后端数据库中将 Status 列的默认值设置为 1。但是在插入新记录时,它默认为status 列生成0。我希望 1 作为数据库中设置的默认值,但 Entity Framework 将其更改为 0。
【问题讨论】:
标签: c# asp.net entity-framework entity-framework-5
您必须打开edmx 文件并从相应实体中选择Status 属性。然后按F4 显示Property-View。您必须为StoreGeneratedPattern 选择Identity。 Itentity 表示数据库在INSERT 上生成值,而不是在UPDATE 上生成值。
【讨论】:
如果您通过实体框架以外的方式插入记录,或者如果您在已包含记录的表上创建新的非空列,则在数据库中设置默认值很有用。 在 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;
}
【讨论】: