Получить список измененных объектов в Entity Framework 7

.net c# dbcontext entity-framework entity-framework-core

Вопрос

Я в тупик - обновление до Entity Framework 7, и я обычно переопределяю SaveChanges внутри DbContext чтобы иметь возможность получить список всех измененных объектов до его изменения. В конечном итоге у меня есть сценарий, который запускает отслеживание предыдущей версии в базе данных. В Entity Framework 6 я бы получил изменения модели следующим образом:

var oc = ((IObjectContextAdapter)this).ObjectContext;
var modifiedItems = oc.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Deleted);

List<ObjectStateEntry> ModifiedObjlist = modifiedItems.ToList();

Однако теперь, когда ObjectContext удаляется в Entity Framework 7, я застреваю, как бы я внутри Entity Framework 7 получить список измененных объектов?

Принятый ответ

Вы можете использовать DbContext.ChangeTracker

var modifiedEntries = context.ChangeTracker
       .Entries()
       .Where(x => x.State == EntityState.Modified)
       .Select(x =>x.Entity)
       .ToList();

Популярные ответы

В некоторых случаях код @dotctor может не работать.

Существуют определенные случаи, когда трекер изменений может не иметь последней информации о объектах, управляемых контекстом, поэтому объект может быть изменен / добавлен / удален без уведомления об изменениях. Чтобы избежать этого случая, я бы обернул код @dotctor следующим условием:

if(context.ChangeTracker.HasChanges())
{
  ...
}


Microsoft Summary of ChangeTracker.HasChanges () :

Проверяет, отслеживаются ли какие-либо новые, удаленные или измененные объекты, чтобы эти изменения были отправлены в базу данных, если вызывается DbContext.SaveChanges или DbContext.SaveChangesAsync. Обратите внимание, что этот метод вызывает ChangeTracker.DetectChanges, если для параметра ChangeTracker.AutoDetectChangesEnabled установлено значение false.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow