2016-05-26 8 views
1

db.Entity.Update(x)を使用するのはいつものことですか? 以下のコードはそれなしで動作します。Entity Framework 7:db.Entity.Update(x)が必要な場合

   using (var db = new DBContext()) 
       { 
        var b = db.Building.First(); 
        b.Residental = true; 
        db.Building.Update(b); // Still works without this line 
        await db.SaveChangesAsync(); 
       } 

答えて

4

EFはエンティティに変更追跡システムを使用しています。これをオンにすると、SaveChanges()を呼び出すだけで、追跡されたエンティティが自動的に更新されます。しかし、自動トラッキングを無効にしたり、コンテキストを閉じたりすると、それ以上の変更は追跡されないため、適用できなくなります。

これは、DbContext hereの有効範囲の例を示しています。

エンティティトラッキングは非常に便利ですが、パフォーマンスを低下させるので、無効にして、手動でUpdateと別のコマンドを作成することができます(EntityStateをModified/Deleted/etcに設定するのと同じです)。ただし、無効にした場合は注意してください。EFのプロキシタイプの遅延読み込みに問題がある可能性があります。あなたが非常に大きなプロジェクトではなく、パフォーマンスがあなたにとって最も重要なものではない場合、エンティティの追跡を有効にすることをお勧めします。

+0

素晴らしいですが、今は明らかです。ありがとうございました! – AsValeO

関連する問題