实体框架4.1和OriginalValues / CurrentValues和DbContext

时间:2011-08-09 21:05:44

标签: c# entity-framework entity-framework-4 entity-framework-4.1

我目前正在使用DfContext和Ef 4.1,我正在尝试审核我的一些实体的所有更改。我可以捕获实体的任何属性的原始值和当前值,但是我无法弄清楚如何捕获NavigationProperty的关联(外键)OriginalValues。有没有人想到这个?

1 个答案:

答案 0 :(得分:2)

您必须在实体中包含外键,以便将其作为正常值进行跟踪,或者必须将DbContext转换为ObjectContext并使用更强大(更繁琐)的ObjectStateManager您可以在哪里获取实体和关系的ObjectStateEntry实例。

要将DbContext转换为ObjectContext,请使用:

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;

要使用条目:

var entires = objectContext.ObjectStateManager
                           .GetObjectStateEntries(~EntityState.Unchanged);

迭代条目并使用他们的StateCurrentValuesOriginalValues属性进行日志记录。不应该修改关系,因此您只需要检查已删除和添加的关系(而不是更新旧的被删除和添加新的)。删除一次是因为他们不会为您提供他们的值。您可以通过更改状态,获取值并将状态更改回已删除来尝试小的解决方法 - 如果它不起作用,您将无法记录关系的旧值。