有没有办法找出实体框架中我的实体上下文中是否有未保存的更改?

有帮助吗?

解决方案

这可能有效(如果通过更改,则表示添加,删除和修改的实体):

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不会产生适当的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top