2009-02-10 110 views
2

我已经计算出如何使用ObjectStateManagerObjectStateEntries来确定给定实体的标量属性的原始值。检索修改引用的原始值

我现在需要知道的是如何为导航属性做同样的事情。 ObjectStateEntry上的GetModifiedProperties方法不返回导航属性。

+0

我不得不去内部高速缓存方法上下文之外。我有一个问题。它在对象创建后立即开始缓存。所以当查询开始构建对象图时,它已经开始缓存。有没有办法找出对象图什么时候完成? – kareem 2009-02-17 14:18:14

回答

0

只是让所有添加或删除ObjectStateEntries,然后使用LINQ只得到那些代表的关系:

private IEnumerable<ObjectStateEntry> GetModifiedRelationshipEntries() 
{ 
    return ObjectStateManager.GetObjectStateEntries(
      EntityState.Added | EntityState.Deleted) 
      .Where(e => e.IsRelationship); 
} 

我发现丹尼尔·西蒙斯这两个博客条目EF编写审计日志时非常有用:

http://blogs.msdn.com/b/dsimmons/archive/2008/01/16/ef-extension-method-extravaganza-part-i-objectstateentry.aspx

http://blogs.msdn.com/b/dsimmons/archive/2008/01/17/ef-extension-methods-extravaganza-part-ii-relationship-entry-irelatedend.aspx