出于审计/历史目的,我使用 Entity Framework 更改跟踪器来确定,在编写更改之前,发生了什么更改并将更改序列化。我可以通过调用 this.ChangeTracker.Entries() 来获取更改后的实体在我的 DbContext衍生并查看任何标记为 EntityState.Added 的值, EntityState.Deleted , 或 EntityState.Modified .这一切都很好。
我的问题是此方法无法跟踪对 EF 对象集合的更改(例如,ICollection<Person> 对象上的 PersonGroup 属性)。
我确定 EF 上下文必须以某种方式跟踪这一点——毕竟,数据库更新还能如何工作?但是我可以使用吗?
请您参考如下方法:
您正在寻找的是关系变化跟踪。您可以在底层 ObjectContext 的 ObjectStateManager 中找到它,这里是您如何获取所有添加的关系:
//you need to call DetectChanges
((IObjectContextAdapter)context).ObjectContext.DetectChanges();
var addedRelations = ((IObjectContextAdapter)context).ObjectContext
.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
.Where(e=>e.IsRelationship).ToList();
