獲取實體框架7中的已修改對象列表


我很難過 - 升級到Entity Framework 7,我通常會覆蓋DbContext的SaveChanges,以便能夠在更改之前獲取所有修改對象的列表。最終,我有一個可以跟踪數據庫中先前版本的腳本。在Entity Framework 6中,我會得到模型更改,如下所示:

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

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

但是現在在Entity Framework 7中刪除了ObjectContext ,我被困住了,我將如何在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的ChangeTracker.HasChanges()摘要

檢查是否正在跟踪任何新的,已刪除或已更改的實體,以便在調用DbContext.SaveChanges或DbContext.SaveChangesAsync時將這些更改發送到數據庫。請注意,除非將ChangeTracker.AutoDetectChangesEnabled設置為false,否則此方法會調用ChangeTracker.DetectChanges。





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因