Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架4.1和OriginalValues/CurrentValues和DbContext_C#_Entity Framework_Entity Framework 4_Entity Framework 4.1 - Fatal编程技术网

C# 实体框架4.1和OriginalValues/CurrentValues和DbContext

C# 实体框架4.1和OriginalValues/CurrentValues和DbContext,c#,entity-framework,entity-framework-4,entity-framework-4.1,C#,Entity Framework,Entity Framework 4,Entity Framework 4.1,我目前正在EF4.1中使用DbContext,并且我正在尝试审核我的一些实体的所有更改。我可以捕获实体的任何属性的原始值和当前值,但是我不知道如何捕获NavigationProperty的关联(外键)原始值。有人知道了吗?您必须将外键包含到实体中,以便将它们作为正常值进行跟踪,或者必须将DbContext转换为ObjectContext并使用更强大(更麻烦)的方法ObjectStateManager中,您可以获取实体和关系的ObjectStateEntry实例 要将DbContext转换为Obj

我目前正在EF4.1中使用DbContext,并且我正在尝试审核我的一些实体的所有更改。我可以捕获实体的任何属性的原始值和当前值,但是我不知道如何捕获NavigationProperty的关联(外键)原始值。有人知道了吗?

您必须将外键包含到实体中,以便将它们作为正常值进行跟踪,或者必须将
DbContext
转换为
ObjectContext
并使用更强大(更麻烦)的方法
ObjectStateManager
中,您可以获取实体和关系的
ObjectStateEntry
实例

要将
DbContext
转换为
ObjectContext
使用:

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
要获取条目,请使用:

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

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

在我的初始查询中,我已经包含了这些fk/相关实体,您是说我应该能够在执行此操作时捕获更改的值和原始值吗?另外,我不确定我是否澄清了这个问题,基本上我有4个列,它们是fk到静态表的。例如,在我想要审核更改的表上,假设我有一个名为transactionid的列。当我更改事务时,我希望通过CurrentValue和OriginalValue访问它。但是,由于transactionid实际上是fk到另一个表的,所以我的模型上没有属性,只有一个导航属性。但是,我要捕获的只是对象更改前后transactionid的整数。它们应该存在一对多和一对一关系。刚刚发现这一点,可能我需要这些“FK关联”,因此FK/NavigationProperties上的ID是我实体中的属性。FK协会是我的目标。