Поиск набора изменений в Entity Framework - PullRequest
2 голосов
/ 27 апреля 2011

Я использую репозитории EF4 в приложении ASP.NET MVC3 / WCF. Я использую шаблон единиц работы для применения изменений в базе данных

Одним из требований пользователя является создание тикета / электронного письма со списком изменений в сущности. Есть ли способ, которым я могу обнаружить только измененные свойства объекта в следующей функции?

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
}

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Да, есть способ:

public void UpdateTrackedEntity<T>(T modifiedEntity) where T : class
{
    var set = CreateObjectSet<T>();
    set.ApplyCurrentValues(modifiedEntity);
    var entry = ObjectStateManager.GetObjectStateEntry(modifiedEntity);
    // entry has two collections: CurrentValues (those you applied) and 
    // OriginalValues (those loaded from DB)
    // It also have method GetModifiedProperties to get collection of modified 
    // property names.
}

Проверьте ObjectStateEntry для получения более подробной информации.

0 голосов
/ 22 марта 2012

Предположим, что ваш объект службы домена - DsrvObj

 DsrvObj.EntityContainer.GetChanges() 
                      ...GetChanges().AddedEntities.Count /*also possible for modified and romoved ones*/

// Эти также могут быть полезны

           DsrvObj.HasChanges
           DsrvObj.MS_EntitySets.HasChanges

даст вам набор изменений, но, что интересно, сегодня я не вижу некоторые измененные логические поля в этом наборе изменений! Наконец, я понял, что, например, если DataGrid находится в режиме редактирования, ваши изменения не отправляются в набор изменений, а после завершения редактирования - в набор изменений.

внедри это, проверь, доверяй!

...