在Entity Framework数据库优先方法中将默认值1设置为EntityName(Status)

时间:2016-02-26 08:31:50

标签: c# asp.net entity-framework entity-framework-5

我使用Entity Framework 5.0,我在后端数据库中将Status列的默认值设置为1。但是在插入新记录时,它会默认为status列生成0。我希望1为默认值,在数据库中设置,但实体框架将其更改为0.

2 个答案:

答案 0 :(得分:0)

您必须打开edmx文件并从相应的实体中选择Status属性。然后按F4以显示Property-View。在那里,您必须为Identity选择StoreGeneratedPatternItentity表示数据库在INSERT上生成值,但不在UPDATE上生成。

答案 1 :(得分:0)

如果要通过Entity Framework以外的方式插入记录,或者如果要在已包含记录的表上创建新的非空列,则在数据库中设置缺省值非常有用。 在Code First中,您可以在迁移中指定数据库默认值:

public override void Up()
{    
   AddColumn("dbo.Foos", "Status", c => c.Integer(nullable: false, defaultValue: 1));
}

默认情况下,C#将整数设置为零,这就是实体框架覆盖数据库的原因。

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

//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;
}