检查是否有任何未决的更改要保存
有没有办法find在entity framework中是否存在未保存的更改?
这可能工作(如果通过更改,你的意思是添加,删除和修改的实体):
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+的人来说,这是一个等效的解决scheme作为扩展方法:
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不会产生正确的结果。