C# 在EntityFramework数据库中,首先将默认值1设置为EntityName(状态)

C# 在EntityFramework数据库中,首先将默认值1设置为EntityName(状态),c#,asp.net,entity-framework,entity-framework-5,C#,Asp.net,Entity Framework,Entity Framework 5,我使用的是EntityFramework5.0,我在后端数据库中将状态列的默认值设置为1。但在插入新记录时,默认情况下,它会为状态列生成0。我希望数据库中设置的默认值为1,但Entity Framework正在将其更改为0。您必须打开edmx文件并从相应的实体中选择Status属性。然后按F4键以显示属性视图。在这里,您必须为StoreGeneratedPattern选择标识。Itentity意味着数据库在插入时生成值,而不是在更新时生成值。如果以实体框架以外的方式插入记录,或者在已包含记录的表

我使用的是EntityFramework5.0,我在后端数据库中将状态列的默认值设置为1。但在插入新记录时,默认情况下,它会为状态列生成0。我希望数据库中设置的默认值为1,但Entity Framework正在将其更改为0。

您必须打开edmx文件并从相应的实体中选择Status属性。然后按F4键以显示属性视图。在这里,您必须为StoreGeneratedPattern选择标识。Itentity意味着数据库在插入时生成值,而不是在更新时生成值。

如果以实体框架以外的方式插入记录,或者在已包含记录的表上创建新的非空列,则在数据库中设置默认值非常有用。 在“代码优先”中,可以在迁移中指定数据库默认值:

public override void Up()
{    
   AddColumn("dbo.Foos", "Status", c => c.Integer(nullable: false, defaultValue: 1));
}
默认情况下,C将整数设置为零,这就是EntityFramework覆盖数据库的原因

因此,如果实体类不是该类型的默认值,则还必须在实体类中设置默认值:

//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中的重构工具使创建支持字段变得非常简单{不支持使用“Identity”模式修改列。列:“Status”。表:“lamiModel.Store.finish”。}这是我在尝试升级StoredGeneratedPattern=Identity时遇到的异常。你的把戏不起作用了我以为列是只读的,只由数据库设置。它是惰性的1,但当更新到0时,我得到了异常