检查是否有任何未决的更改要保存

有没有办法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不会产生正确的结果。