Skip to main content
 首页 » 编程设计

c#之使用 Entity Framework 更改跟踪器跟踪集合的更改

2024年01月26日27thcjp

出于审计/历史目的,我使用 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();