实体框架4.1和OriginalValues/CurrentValues和DbContext
本文关键字:CurrentValues DbContext OriginalValues 实体 框架 | 更新日期: 2023-09-27 18:05:17
我目前正在使用Ef 4.1的DbContext,我正在尝试审计我的一些实体的所有更改。我可以捕获实体的任何属性的原始值和当前值,但是我不知道如何捕获NavigationProperty的关联(外键)OriginalValues。有人想明白了吗?
您必须将外键包含到您的实体中,以便它们将被跟踪为正常值,或者您必须将DbContext
转换为ObjectContext
并使用更强大(也更麻烦)的ObjectStateManager
,在那里您可以为实体和关系获得ObjectStateEntry
的实例。
将DbContext
转换为ObjectContext
使用:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
获取条目使用:
var entires = objectContext.ObjectStateManager
.GetObjectStateEntries(~EntityState.Unchanged);
遍历条目并使用它们的State
, CurrentValues
和OriginalValues
属性来进行日志记录。关系不应该被修改,所以您应该只需要检查删除和添加的关系(而不是更新旧的被删除和新的被添加)。问题是删除一次,因为它们不会向您提供它们的值。您可以尝试一些小的解决方法,通过更改它们的状态,获取值并将状态更改回已删除-如果它不起作用,您将无法记录关系的旧值。