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
.net 检测实体框架EntityObject上更改的属性_.net_Entity Framework_Entity Framework 4 - Fatal编程技术网

.net 检测实体框架EntityObject上更改的属性

.net 检测实体框架EntityObject上更改的属性,.net,entity-framework,entity-framework-4,.net,Entity Framework,Entity Framework 4,我想读取EntityObject中的更改,以便包含在报告中 例如: 名称:前后 位置:前后 有没有一种通用的方法可以做到这一点?我使用EF4生成默认的实体类(不是POCO) 这些实体将被附加,因此应跟踪它们的更改。我看不到通过IEntityWithChangeTracker界面执行此操作的方法 遍历导航属性很好,但只要报告更改的基本属性就足够了。您可以为您的实体检索ObjectStateEntry,并检查CurrentValues和OriginalValues的内容。试试这个(未经测试): 这将

我想读取
EntityObject
中的更改,以便包含在报告中

例如:

名称:前后

位置:前后

有没有一种通用的方法可以做到这一点?我使用EF4生成默认的实体类(不是POCO)

这些实体将被附加,因此应跟踪它们的更改。我看不到通过
IEntityWithChangeTracker
界面执行此操作的方法


遍历导航属性很好,但只要报告更改的基本属性就足够了。

您可以为您的实体检索
ObjectStateEntry
,并检查
CurrentValues
OriginalValues
的内容。试试这个(未经测试):


这将不会处理导航属性,我不确定它将如何处理复杂类型。

除了Ladislav Mrnka的建议之外:不是真正的通用,但至少有一个可能的解决方案:。这允许您在生成模型时向每个实体添加自己的自定义逻辑


在您的例子中,您可以实现所需的遍历功能来检查导航属性。

刚刚在一些
string
属性上测试了这一点,效果很好。我确实有一些复杂的类型和导航属性,所以稍后我会尝试一下,如果我发现有什么有用的,就在这里发布。非常感谢Ladislav。@Ladislav如何使用EF6和DbContext实现这一点?顺便说一句,您的句柄打破了注释框上的自动完成。为了完整性,T4模板在这里非常值得一提,但在我看来,至少使用现有API就足够了,而且通常更容易/更安全。
ObjectStateEntry entry = objectContext.ObjectStateManager.GetObjectStateEntry(entity);
foreach (string property in entry.GetModifiedProperties()) {
    object oldValue = entry.OriginalValues[property];
    object newValue = entry.CurrentValues[property];
}