5

この質問でまったく同じ問題が発生しました: 新しいエンティティを挿入するときにブール値でSQL Serverのデフォルト値の制約をオーバーライドする方法は? [閉まっている]

彼のように、私はクライアントからコントローラーへのブール値の適切な値 false を取得しますが、_context.SaveChanges();Entity Framework とデータベースの既定値の制約のために、の呼び出しによって true に設定されます。

BUT :私は Entity Framework Core を使用してい[DatabaseGenerated(DatabaseGeneratedOption.Computed)]ますが、問題を解決するために削除する注釈はありません。

私の ApplicationDbContext.cs で:

modelBuilder.Entity<myEntity>(entity =>
{
    entity.Property(e => e.Active).HasDefaultValueSql("1");
    //entity.Property(e => e.Active).HasDefaultValueSql<bool>("1"); // doesn't fix
    ...
}

私のデータベースで:

CREATE TABLE myEntity(
    Id      INTEGER IDENTITY(1,1) NOT NULL,
    ...
    Active  BIT NOT NULL CONSTRAINT DF_myEntity_Active DEFAULT 1
);

私のコントローラーで:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id, Active, etc.")] Entity myEntity)
{
    if (ModelState.IsValid)
    {
        _context.Add(myEntity); // here myEntity.Active = false
        await _context.SaveChangesAsync();
        // same problem with _context.SaveChanges(); in another controller
        // here myEntity.Active = true
    }
    ...
}

EF は C# ブール値を SQL ビットに正しくマップせず、常に既定値を使用しているようです。誰かが偽の値を強制する問題を抱えていますか?

4

3 に答える 3

0

--data-annotations最後に、EF コマンドのオプションを使用して、EF モデルでデータ注釈を生成できます。そのため[DatabaseGenerated(DatabaseGeneratedOption.None)]、プロパティを設定し、データベースのデフォルトの制約を使用しません。

于 2016-12-22T08:22:57.833 に答える