API отслеживания изменений Entity Framework и справочные записи - PullRequest
7 голосов
/ 17 марта 2011

Нужно написать общий код Audit для моего подкласса DbContext.

foreach (var entry in this.ChangeTracker.Entries<MyClass>())
{
    if (entry.State == EntityState.Modified)
    {
        var entityProperties = entry.Entity.GetType().GetProperties();
        foreach (var entityProperty in entityProperties)
        {
            DbMemberEntry propertyEntry = entry.Member(property.Name);
            if (propertyEntry is DbPropertyEntry)
            {
                // IsModified available
            }
            else if (propertyEntry is DbReferenceEntry)
            {
                // IsModified not available
            }
        }
    }
}

1) Если я изменяю только ссылочное свойство, значение entry.State имеет значение «Не изменено».

2) Даже если для точки 1 установлено значение «Modified», класс DbReferenceEntry, по-видимому, не имеет ни свойства IsModified, ни исходного значения.

Я предполагаю, что это возможно, поскольку EF должен отслеживать это.

Может кто-нибудь помочь?

Спасибо, Бен

1 Ответ

7 голосов
/ 17 марта 2011

Да справочная запись (свойство навигации) не отслеживает изменения.Это ответственность свойства внешнего ключа (в случае ассоциации внешнего ключа) или отдельного объекта, отслеживающего изменения независимой ассоциации.В ObjectContext API вы можете получить эти объекты ObjectStateManager, но, похоже, в DbContext API этого нет.Я задал вопрос об этом на MSDN Forum .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...