实体框架4.1和OriginalValues/CurrentValues和DbContext

本文关键字:CurrentValues DbContext OriginalValues 实体 框架 | 更新日期: 2023-09-27 18:05:17

我目前正在使用Ef 4.1的DbContext,我正在尝试审计我的一些实体的所有更改。我可以捕获实体的任何属性的原始值和当前值,但是我不知道如何捕获NavigationProperty的关联(外键)OriginalValues。有人想明白了吗?

实体框架4.1和OriginalValues/CurrentValues和DbContext

您必须将外键包含到您的实体中,以便它们将被跟踪为正常值,或者您必须将DbContext转换为ObjectContext并使用更强大(也更麻烦)的ObjectStateManager,在那里您可以为实体和关系获得ObjectStateEntry的实例。

DbContext转换为ObjectContext使用:

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

获取条目使用:

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

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