DbContext与关系的ChangeTracker问题

时间:2012-04-09 08:10:12

标签: entity-framework entity-framework-4.1 change-tracking

假设我们有CustomersCustomerCategories与n-n关系DbContext / ObjectContext。我也希望在AuditLog表中保持关系状态。我可以通过以下代码在常规情况下达到此目的:

通过以下代码

获取ChangeTracker中的关系状态:

foreach (ObjectStateEntry dbEntry in){ 
   objectContext
   .ObjectStateManager
   .GetObjectStateEntries(~EntityState.Detached)
   .Where(o=>o.IsRelationship)

然后通过以下代码找到两个相关实体的密钥:

(dbEntry.CurrentValues.GetValue(0) as EntityKey).EntityKeyValues[0].Value //for the key of related entity in customers table 
(dbEntry.CurrentValues.GetValue(1) as EntityKey).EntityKeyValues[0].Value //for the key of related entity in CustomerCategories table 

除非新添加的相关客户或相关CustomerCategories导致上述代码返回null,否则一切正常。所以我找不到相关的实体。

有没有正确找到相关实体?

1 个答案:

答案 0 :(得分:0)

最后,几个小时后我找到了一个简单的解决方案:GetObjectByKey一个ObjectContext有的方法,而DbContext没有!它通过实体引用搜索整个上下文。所以我做了它而不是上面的代码:

 objectContext.GetObjectByKey((dbEntry.CurrentValues.GetValue(0) as EntityKey));
 objectContext.GetObjectByKey((dbEntry.CurrentValues.GetValue(1) as EntityKey));