1

タイトルのように、私は方法を持っています:

void method(MyDb db, Thread thread, Post post)
{
  thread.Title = "changed";
  db.SaveChanges();
}

(もちろん、スレッドアイテムはMyDbオブジェクト内にあります)

更新が必要なアイテムをどのように認識しますか?私はそのようなものをどこにも指定しませんでしdb.Update(thread)た、それは私の助けなしに何を更新するかを知っていました。その下にはどのようなメカニズムがありますか?

4

1 に答える 1

3

データベースからエンティティをロードThreadすると、デフォルトで「接続済み」になります。これは、EFがエンティティへの参照を内部的に保持し、データベースからロードしたときにエンティティの元の値も保持することを意味します。

タイトルを更新すると、次の2つのシナリオが発生する可能性があります。

  • 変更追跡プロキシを使用していて、EFに変更が通知されたため、インスタンスが変更されたことが認識され、呼び出したときにそれらの変更がデータベースに適用されます。SaveChanges
  • 変更追跡プロキシを使用しておらず、SaveChangesを呼び出すと、EFは内部で維持されているエンティティ参照のリストを調べ、元の値とは異なるプロパティを持つエンティティがあるかどうかを確認します。そのようなすべてのエンティティとその変更されたプロパティは、SaveChanges

そのプロセスの詳細については、こちらをご覧ください。

于 2012-08-22T20:02:13.323 に答える