質問: 監査/履歴の目的で、Entity Frameworkの変更トラッカーを使用して、変更を書き込む前に変更内容を判断し、変更をシリアル化します。変更されたエンティティは、 `DbContext`派生物の`this.ChangeTracker.Entries()`を呼び出し、 `EntityState.Deleted` 、 `EntityState.Deleted` 、または`EntityState.Modified`マークされた`EntityState.Added`値を`EntityState.Modified`ます。これはすべて素晴らしいです。 私の問題は、このメソッドは、EFオブジェクトのコレクション(たとえば、 `PersonGroup`オブジェクトの`ICollection`プロパティ)の変更を追跡することができないということ`ICollection` 。 私は、EFコンテキストが何とかこれを追跡しなければならないと確信しています。しかし、それは私に利用可能ですか?
回答: あなたが探しているのは、関係変更の追跡です。基本となる`ObjectContext` `ObjectStateManager`で見つけることができます。追加される関係をすべて取得する方法は次のとおりです。 ``` //you need to call DetectChanges ((IObjectContextAdapter)context).ObjectContext.DetectChanges(); var addedRelations = ((IObjectContextAdapter)context).ObjectContext .ObjectStateManager.GetObjectStateEntries(EntityState.Added) .Where(e=>e.IsRelationship).ToList(); ```