Проблема DbContext ChangeTracker с отношениями

Предположим, у нас есть Customers и CustomerCategories с отношением n-n DbContext/ObjectContext. Я также хочу сохранить статус отношений в таблице AuditLog. Я могу достичь этого с помощью следующего кода в обычных случаях:

получение статуса отношений в ChangeTracker с помощью следующего кода:

foreach (ObjectStateEntry dbEntry in){ 
   objectContext
   .ObjectStateManager
   .GetObjectStateEntries(~EntityState.Detached)
   .Where(o=>o.IsRelationship)

а затем найти ключи обоих связанных сущностей по следующим кодам:

(dbEntry.CurrentValues.GetValue(0) as EntityKey).EntityKeyValues[0].Value //for the key of related entity in customers table 
(dbEntry.CurrentValues.GetValue(1) as EntityKey).EntityKeyValues[0].Value //for the key of related entity in CustomerCategories table 

Все в порядке, если связанный Customer или связанные CustomerCategories добавлены недавно, что приводит к тому, что приведенный выше код возвращает значение null. Поэтому я не могу найти связанный объект.

Есть ли способ правильно найти связанную сущность?


person Mahmoud Moravej    schedule 09.04.2012    source источник


Ответы (1)


Наконец, через пару часов я нашел простое решение: GetObjectByKey метод, который есть у ObjectContext, а у DbContext нет! и он ищет весь контекст по ссылке на сущность. Поэтому я сделал это вместо приведенных выше кодов:

 objectContext.GetObjectByKey((dbEntry.CurrentValues.GetValue(0) as EntityKey));
 objectContext.GetObjectByKey((dbEntry.CurrentValues.GetValue(1) as EntityKey));
person Mahmoud Moravej    schedule 09.04.2012