HasDefaultValue vs从构造函数设置默认值

时间:2018-10-29 09:12:17

标签: c# entity-framework-core ef-core-2.1

使用EF Core时,我们可以在属性上设置默认值。

public class Foo
{
    public int Bar { get; set; }
}

public class FooConfiguration : IEntityTypeConfiguration<Foo>
{
    public void Configure(EntityTypeBuilder<Foo> builder)
    {
        builder.Property(s => s.Bar).HasDefaultValue(1337);
    }
}

什么时候我们应该更喜欢使用HasDefaultValue而不是在类中初始化默认值?

public class Foo
{
    public int Bar { get; set; } = 1337;

    // or inside constructor...
    // public Foo { Bar = 1337; }
}

还是我们都应该做?但是在这种情况下,HasDefaultValue似乎是多余的。似乎只能选择一个选项。

2 个答案:

答案 0 :(得分:1)

HasDefaultValue()方法指定

  

列的默认值是在插入新行但未为该列指定值的情况下将插入的值。

在类中使用默认值初始化该属性将使该类的所有初始化对象都具有指定的默认值(如果未另行指示)。在您的情况下,这意味着即使未连接的对象也将具有默认值,而在将对象插入数据库时​​将使用HasValue()方法。这也意味着,如果在添加HasDefaultValue()方法时数据库中已经有空值,则它们不会被覆盖。

答案 1 :(得分:-2)

我不知道我是否理解正确,但是您可以使用getter / setter方法为不同的属性设置不同的默认值,如下所示,

 private int _bar = 1337;
 public int Bar{
     get{
         return _bar;
     }
     set{
         _bar = value;
     }
 }

 private int _secondBar = 1234;
 public int SecondBar{
     get{
         return _secondBar;
     }
     set{
         _secondBar = value;
     }
 }