检查是否有任何待处理的更改要保存
题
有没有办法找出实体框架中我的实体上下文中是否有未保存的更改?
解决方案
这可能有效(如果通过更改,则表示添加,删除和修改的实体):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
编辑:
改进的代码:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
其他提示
从EF 6开始,有 context.ChangeTracker.HasChanges()
.
对于使用EF 4+的人,这是一个等效的解决方案作为扩展方法:
public static class DbContextExtensions {
public static Boolean HasPendingChanges(this DbContext context) {
return context.ChangeTracker.Entries()
.Any(e => e.State == EntityState.Added
|| e.State == EntityState.Deleted
|| e.State == EntityState.Modified);
}
}
请注意,您不能将值结合在一起。功能 GetObjectStateEntries()
为您处理逻辑,但LINQ不会产生适当的结果。
不隶属于 StackOverflow