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

时间:2012-08-14 13:16:32

标签: .net entity-framework entity-framework-4

我想阅读EntityObject中的更改以包含在报告中。

例如:

  

名称: 之前之后

     

位置: 之前之后

有没有通用的方法来做到这一点?我正在使用EF4和默认实体类生成(不是POCO)。

这些实体将被附加,因此应该跟踪它们的变化。我无法通过IEntityWithChangeTracker界面看到这样做的方法。

遍历导航属性会很不错,但仅仅报告更改的原始属性就足够了。

2 个答案:

答案 0 :(得分:8)

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

ObjectStateEntry entry = objectContext.ObjectStateManager.GetObjectStateEntry(entity);
foreach (string property in entry.GetModifiedProperties()) {
    object oldValue = entry.OriginalValues[property];
    object newValue = entry.CurrentValues[property];
}

这不会处理导航属性,我不确定它如何与复杂类型一起使用。

答案 1 :(得分:1)

除了Ladislav Mrnka的建议:不是非常通用,但至少是可能的解决方案:Code Generation and T4 Text Templates。这允许您在生成模型时向每个实体添加自己的自定义逻辑。

在您的情况下,您可以实现所需的遍历功能来检查导航属性。