デバッガーの下で、のエントリを返すケースがありDbContext.ChangeTracker.Entry(e)
ます。の検索結果と基になるエントリを列挙すると、(期待される)のエントリが見つかります。State
Detached
DbContext.ChangeTracker.Entries()
ObjectContext
e
State
Unchanged
何が起こっている?
追加の詳細は次のとおりです。
- POCO エンティティを使用します。
- 変更追跡はオンです
- プロキシの作成はオフです
- 遅延読み込みはオフです
- エンティティを初めて保存するとき (コンテキストへの追加など) には問題は発生しません。古いエンティティをコンテキストに取得してから変更しようとすると発生します。これは、変更されるべきではない多くの「参照」エンティティを含む集約ルートです
Equals
エンティティでオーバーライドされ、IEquatable<T>
実装されます。そのコードは T4 によって生成されます。- 私は、保存のためのルールを生成するように宣言的に構成された汎用リポジトリ実装を使用しています (たとえば、エンティティを追加、添付/変更、添付/未変更する必要があるかどうか。正しい順序でこれを行っているようです。たとえば、集約ルートが追加されます/attached を最後にアタッチすると、最初に他のエンティティが変更された状態で取り込まれるためです (変更されていないエンティティを最初に追加すると、これが防止されます)。