使用EF changetracker手动获取一组更改?

时间:2015-05-13 23:51:11

标签: c# entity-framework change-tracking

如果我加载一个实体,进行一些更改,然后去保存它,EF会生成一个更新语句。

这必然意味着在某些时候某些东西(可能是更改跟踪器)正在导航加载的对象层次结构并生成已更改的(实体,属性,值)列表。对于不相关的基础设施,我需要基本上以类似的方式对对象图进行差异化。我认为我应该能够重用相同的机制。

这就是问题所在 - 我可以这样做吗?我可以查询对特定实体甚至整个对象图的更改吗?怎么样?

1 个答案:

答案 0 :(得分:13)

您可以使用返回DbChangeTracker的上下文IEnumerable<DbEntityEntry>。然后,您可以循环这些将CurrentValues与OriginalValues进行比较。原始值是从最后一个查询到db的值。

foreach (DbEntityEntry entity in
         ChangeTracker.Entries().Where(e => e.State == EntityState.Modified)
{
    foreach (var propName in entity.CurrentValues.PropertyNames)
    {
        var current = entity.CurrentValues[propName];
        var original = entity.OriginalValues[propName];
    }
}