簡體   English   中英

HasDefaultValue vs從構造函數設置默認值

[英]HasDefaultValue vs setting default value from the constructor

使用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似乎是多余的。 似乎只能選擇1個選項。

HasDefaultValue()方法指定

列的默認值是在插入新行但未為該列指定值的情況下將插入的值。

如果沒有另外說明,則在類中使用默認值初始化屬性將使該類的所有初始化對象具有指定的默認值。 在您的情況下,這意味着即使未連接的對象也將具有默認值,而在將對象插入數據庫時​​將使用HasValue()方法。 這也意味着,如果在添加HasDefaultValue()方法時數據庫中已經有空值,則它們不會被覆蓋。

我不知道我是否理解正確,但是您可以使用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;
     }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM