我目前正在使用DfContext和Ef 4.1,我正在尝试审核我的一些实体的所有更改。我可以捕获实体的任何属性的原始值和当前值,但是我无法弄清楚如何捕获NavigationProperty的关联(外键)OriginalValues。有没有人想到这个?
答案 0 :(得分:2)
您必须在实体中包含外键,以便将其作为正常值进行跟踪,或者必须将DbContext
转换为ObjectContext
并使用更强大(更繁琐)的ObjectStateManager
您可以在哪里获取实体和关系的ObjectStateEntry
实例。
要将DbContext
转换为ObjectContext
,请使用:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
要使用条目:
var entires = objectContext.ObjectStateManager
.GetObjectStateEntries(~EntityState.Unchanged);
迭代条目并使用他们的State
,CurrentValues
和OriginalValues
属性进行日志记录。不应该修改关系,因此您只需要检查已删除和添加的关系(而不是更新旧的被删除和添加新的)。删除一次是因为他们不会为您提供他们的值。您可以通过更改状态,获取值并将状态更改回已删除来尝试小的解决方法 - 如果它不起作用,您将无法记录关系的旧值。