Entity-framework-track-changes
提供:Dev Guides
Entity Framework-変更の追跡
Entity Frameworkは、エンティティとその関係に加えられた変更を追跡する機能を提供するため、コンテキストのSaveChangesメソッドが呼び出されると、データベースに対して正しい更新が行われます。 これは、Entity Frameworkの重要な機能です。
- 変更追跡は、新しいレコードをエンティティコレクションに追加し、既存のエンティティを変更または削除するときに変更を追跡します。
- その後、すべての変更はDbContextレベルで保持されます。
- これらのトラックの変更は、DbContextオブジェクトが破棄される前に保存されないと失われます。
- DbChangeTrackerクラスは、コンテキストによって追跡されている現在のエンティティに関するすべての情報を提供します。
- コンテキストごとにエンティティを追跡するには、プライマリキープロパティが必要です。
Entity Frameworkでは、変更追跡はデフォルトで有効になっています。 DbContextのAutoDetectChangesEnabledプロパティをfalseに設定して、変更追跡を無効にすることもできます。 このプロパティがtrueに設定されている場合、Entity Frameworkはエンティティの状態を維持します。
学生とその登録がデータベースから取得される次の例を見てみましょう。
上記の例をコンパイルして実行すると、次の出力が表示されます。
すべてのデータがデータベースからのみ取得されることがわかります。これが、すべてのエンティティのステータスが変更されない理由です。
ここで、もう1つの登録を追加し、データベースから1人の生徒を削除する別の簡単な例を見てみましょう。 以下は、新しい登録が追加され、1人の生徒が削除されるコードです。
上記の例をコンパイルして実行すると、次の出力が表示されます。
新しい登録が追加され、1人の学生がデータベースから削除されたため、登録エンティティのステータスが追加に設定され、学生エンティティのステータスが削除されたことがわかります。
理解を深めるために、上記の例を段階的に実行することをお勧めします。