88

Required次のようにデータ注釈を使用します。

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

データベースでsomefieldをに設定します。NULL を許可するようにsomefieldを設定するにはどうすればよいですか?SQL Server Management Studioで設定しようとしましたが、EntityFrameworkでに設定し直しました。Not NullNot Null

4

4 に答える 4

129

プロパティから[必須]属性を省略してstring somefieldください。NULLこれにより、データベースに有効な列が作成されます。

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; }
于 2012-05-22T22:13:02.550 に答える
34

The other option is to tell EF to allow the column to be null:

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

This code should be in the object that inherits from DbContext.

于 2012-08-01T15:19:18.590 に答える
16

Ef .netコアには、実行できる2つのオプションがあります。最初にデータ注釈を付けます:

public class Blog
{
    public int BlogId { get; set; } // optinal case

    [Required]
    public string Url { get; set; } // required case
}

または流暢な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; }
}

詳細はこちら

于 2018-12-18T10:44:42.103 に答える
4

コンパイラエラーが発生したため、Jonの回答は機能しませんでしたCS0453 C#ジェネリック型またはメソッドでパラメータ「T」として使用するには、型がnull許容値型である必要があります

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeObject>().HasOptional(m => m.somefield);
    base.OnModelCreating(modelBuilder);
}
于 2016-07-14T17:16:01.603 に答える