web-dev-qa-db-ja.com

Entity Framework 6 Code Firstでデフォルト値の制約を設定するにはどうすればよいですか?

従来のアプリでは、ほとんどの文字列プロパティをnullにすることはできず、string.emptyのデフォルト値が必要です。

私は移行でこれを行うことができることを知っていますが、流れるような設定インターフェイスを使用してこれを行う方法を探しています:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<string>().Configure(c =>
        {
            c.HasMaxLength(255);

            if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false))
            {
                c.IsRequired();
                // I want to set a default value (string.empty) here.
            }
    }

これを行う方法はありますか、エンティティコンストラクタのすべての文字列を初期化する運命にありますか?

31
ECC-Dan

答えは はい

AddColumn("[table name]", 
          "[column name]", 
          c => c.Boolean(nullable: false, defaultValue: false));
15
Gh61

残念ながら、現時点での答えは「いいえ」です。

しかし、あなたはcanに投票できます- デフォルト値のより良いサポート

2015年3月30日編集:EF7で登場... Code Firstでデータベースのデフォルト値をサポート

EDIT 2017年1月30日:デフォルトのデータベース値の一般的なサポートは、EF Core(EF7の新しい名前)の一部です... デフォルト値

EDIT 2018年1月17日:なぜEF7はまだ「パイプドリーム」であると人々がコメントしているのか分かりません。 EF7(EF Coreに改名)は2016年6月27日にリリースされ、次のようにFluentAPIを使用してCode Firstのデフォルト値の設定をサポートします。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .Property(b => b.Rating)
        .HasDefaultValue(3);
}

EF Core 2.0は2017年8月14日にリリースされました

43
Colin

コンストラクター内でデフォルト値を設定できます

class Foo : Model
{
    public bool DefaultBool { get; set; }

    public Foo()
    {
        DefaultBool = true;
    }
}

新しいFooを作成すると、プロパティDefaultBoolに真の値が設定されます。これはデフォルトの制約ではありませんが、機能します。

8
Ariel Moraes