この質問でまったく同じ問題が発生しました: 新しいエンティティを挿入するときにブール値で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 ビットに正しくマップせず、常に既定値を使用しているようです。誰かが偽の値を強制する問題を抱えていますか?