東京で働く、ある開発者のメモ

[Entity Framework] Entity の状態(エンティティの状態)

Entity Framework に限らず、O/R マッパーを使用して開発する場合は、Entity の状態を意識しておく必要がある。

(1) Entity の状態

Entity が Context によってトラッキングされおり、かつデータベースにデータが存在し、値が変更されていない状態。SaveChanges() は使用できない。Unchanged状態で SaveChanges() を実行しても、データベースのデータは何も変更されない。

Entity は Context にトラッキングされているが、まだデータベースにデータが存在していない状態。SaveChanges() を実行すると、データベースにデータを挿入し、Unchanged 状態になる。

Entity が Context によってトラッキングされおり、かつデータベースにデータは存在しているが、オブジェクトのプロパティの値が一部またはすべてが変更されている状態。SaveChanges() を実行すると、データベースのデータを更新し、Unchanged 状態になる。

Entity は Context によってトラッキングされ、データベースにデータは存在しており、削除対象としてマークされた状態。SaveChanges() を実行すると、削除された Entity はデータベースから削除され、 Context から切り離され、Detached 状態になる。

オブジェクトのインスタンスは存在しているが、Entity が Context によってトラッキングされていない状態。

(2) 参考サイト

「Working with entity states」
https://docs.microsoft.com/ja-jp/ef/ef6/saving/change-tracking/entity-state