如果我加载了一个实体,做了一些更改,然后转到保存它,EF会生成一个update语句。
这一定意味着某些东西(可能是变更跟踪器)正在浏览已加载的对象层次结构,并生成已更改的(实体、属性、值)列表。对于不相关的基础设施,我需要以类似的方式从根本上比较对象图。我想我应该能够重用相同的机制。
所以这就是问题所在--我能做到吗?我可以查询对特定实体甚至整个对象图的更改吗?多么?
发布于 2015-05-14 10:43:39
您可以使用返回IEnumerable<DbEntityEntry>
的上下文的DbChangeTracker
。然后,您可以循环遍历这些代码,将CurrentValues与OriginalValues进行比较。原始值是从最后一次查询到db的值。
var modifiedEntries = ChangeTracker.Entries().Where(e => e.State == EntityState.Modified);
foreach (DbEntityEntry entity in modifiedEntries)
{
foreach (var propName in entity.CurrentValues.PropertyNames)
{
var current = entity.CurrentValues[propName];
var original = entity.OriginalValues[propName];
}
}
https://stackoverflow.com/questions/30227076
复制