有没有办法在实体框架中找出我的实体上下文中是否有未保存的更改?
			
			29566 次
		
3 回答
            112        
        
		
从 EF 6 开始,有context.ChangeTracker.HasChanges().
于 2014-10-08T13:02:23.250   回答
    
    
            61        
        
		
这可能有效(如果您所说的更改是指添加、删除和修改的实体):
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();
    于 2010-06-28T19:04:35.637   回答
    
    
            46        
        
		
对于那些使用 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 不会产生正确的结果。
于 2013-01-07T23:37:12.030   回答