Entity Framework: обновление объекта при обновлении другого объекта - PullRequest
1 голос
/ 30 июня 2010

У меня есть EDM, он включает расширение сущностей и историю. Моя цель - использовать историю, чтобы отслеживать все изменения, внесенные в сущность расширения. Например, если расширение с идентификатором 223 изменило свое свойство Name_Display, я хочу, чтобы объект истории записал это.

Я использую ASP.NET с VB.NET. Куда в моем коде я добавляю хук, чтобы сказать «обновить сущность истории» и как этот хук должен выглядеть?

1 Ответ

2 голосов
/ 30 июня 2010

Как насчет события SavingChanges:

public override int SaveChanges(SaveOptions options)
{

    foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(
        EntityState.Added | EntityState.Modified))
    {
        //DO STUFF like create history
    }
    return base.SaveChanges(options);
}

Вот страница, которая может помочь: http://msdn.microsoft.com/en-us/library/cc716714.aspx

РЕДАКТИРОВАТЬ: Тогда я думаю, что это может помочь...

http://msdn.microsoft.com/en-us/library/bb896269.aspx

Отказ от ответственности ... У меня нет опыта попытки сравнить исходные и старые значения

Отслеживание изменений

Информация об отслеживании изменений для графа объектов хранится в объектах ObjectStateEntry, которые создаются ObjectContext для каждого присоединенного объекта.Объекты ObjectStateEntry хранят следующую информацию для сущностей:

- EntityKey, который определяет идентичность сущности.

-The EntityState для объекта

-Информация о связанных объектах

-Имя набора сущностей

-The CurrentValues ​​и OriginalValues ​​его свойств (объекты в состоянии «Добавлен» не имеют исходных значений)

-Имена измененных свойств объекта.

Чтобы узнать, изменилось ли значение свойства между вызовами SaveChanges, запросите> коллекцию измененных имен свойств, возвращаемых методом GetModifiedProperties ...

...