Entity Framework に限らず、O/R マッパーを使用して開発する場合は、Entity の状態を意識しておく必要がある。
(1) Entity の状態
- Unchanged 状態
Entity が Context によってトラッキングされおり、かつデータベースにデータが存在し、値が変更されていない状態。SaveChanges() は使用できない。Unchanged状態で SaveChanges() を実行しても、データベースのデータは何も変更されない。
- Added 状態
Entity は Context にトラッキングされているが、まだデータベースにデータが存在していない状態。SaveChanges() を実行すると、データベースにデータを挿入し、Unchanged 状態になる。
- Modified 状態
Entity が Context によってトラッキングされおり、かつデータベースにデータは存在しているが、オブジェクトのプロパティの値が一部またはすべてが変更されている状態。SaveChanges() を実行すると、データベースのデータを更新し、Unchanged 状態になる。
- Deleted 状態
Entity は Context によってトラッキングされ、データベースにデータは存在しており、削除対象としてマークされた状態。SaveChanges() を実行すると、削除された Entity はデータベースから削除され、 Context から切り離され、Detached 状態になる。
- Detached 状態
オブジェクトのインスタンスは存在しているが、Entity が Context によってトラッキングされていない状態。
(2) 参考サイト
「Working with entity states」
https://docs.microsoft.com/ja-jp/ef/ef6/saving/change-tracking/entity-state