web-dev-qa-db-ja.com

エンティティフィールドへのNullableプロパティ、Code Firstを介したEntity Framework

データ注釈Requiredを使用すると、次のようになります。

[Required]
public int somefield {get; set;}

設定します なんか データベースのNot Nullに、どのように設定できますか なんか NULLを許可するには、SQL Server Management Studioで設定しようとしましたが、Entity FrameworkはNot Nullに設定し直しました。

62
chrisramon

string somefieldプロパティから[Required]属性を省略するだけです。これにより、dbにNULLable列が作成されます。

Int型でデータベース内のNULLを許可するには、モデル内でNULL可能なintとして宣言する必要があります。

// an int can never be null, so it will be created as NOT NULL in db
public int someintfield { get; set; }

// to have a nullable int, you need to declare it as an int?
// or as a System.Nullable<int>
public int? somenullableintfield { get; set; }
public System.Nullable<int> someothernullableintfield { get; set; }
98
danludwig

もう1つのオプションは、列にnullを許可するようEFに指示することです。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<SomeObject>().Property(m => m.somefield).IsOptional();            
        base.OnModelCreating(modelBuilder);
}

このコードは、DbContextから継承するオブジェクト内にある必要があります。

29
Jon

コンパイラエラーが発生したため、Jonの答えはうまくいきませんでしたCS0453 C#メソッド

これは私にとってはうまくいきました:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().HasOptional(m => m.somefield);
    base.OnModelCreating(modelBuilder);
}
3
Jon

Ef .net coreには2つのオプションがあります。最初にデータ注釈付き:

public class Blog
{
    public int BlogId { get; set; }
    [Required]
    public string Url { get; set; }
}

または、流れるようなAPIを使用する場合:

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)
            .IsRequired(false)//optinal case
            .IsRequired()//required case;
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

詳細があります こちら

1
nzrytmn