Я пытаюсь внедрить систему аудита изменений на уровне контекста, используя EF4 (сначала база данных). Я переопределяю SaveChanges
и фиксирует объекты, которые имеют состояние Added
, Deleted
, или Modified
из контекста ObjectStateManager
. Это нормально работает, но я столкнулся с проблемой, когда ни одно из этих объектов не имеет этого состояния (включая сущности, которые я изменил в коде), но в контексте есть, которые имеют изменения в базе данных. Я зашел так далеко, чтобы посмотреть список записей с Unchanged
в качестве состояния, и мой измененный объект находится в этом списке.EF4 ObjectStateManager не сообщает об изменениях?
Единственное осложнение, которое я вижу, заключается в том, что я использую объекты самоконтроля (поскольку это служба WCF, которая обычно отправляет эти STE клиенту для изменений, тогда клиент передает измененные STE-файлы обратно в сохраняйте изменения). Похоже, что объекты, которые извлекаются на сервере и изменяются непосредственно там (а не передаются клиенту и используются STE ObjectChangeTracker
), не помечены как Modified
. Это нормальное/ожидаемое поведение? Если это так, то ясно, что контекст использует что-то другое, чем ObjectStateManager
, чтобы определить, какие изменения сохраняются в базе данных, так как изменения составляют.
Как я могу обнаружить эти изменения и отслеживать их? Кто-нибудь знает, что это такое, что контекст использует для отслеживания изменений? Я всегда считал, что это был ObjectStateManager
, но это, похоже, не так.