假设我们有Customers
和CustomerCategories
与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,否则一切正常。所以我找不到相关的实体。
有没有正确找到相关实体?
答案 0 :(得分:0)
最后,几个小时后我找到了一个简单的解决方案:GetObjectByKey
一个ObjectContext有的方法,而DbContext没有!它通过实体引用搜索整个上下文。所以我做了它而不是上面的代码:
objectContext.GetObjectByKey((dbEntry.CurrentValues.GetValue(0) as EntityKey));
objectContext.GetObjectByKey((dbEntry.CurrentValues.GetValue(1) as EntityKey));