programing

저장할 보류중인 변경 사항이 있는지 확인

nasanasas 2020. 10. 31. 09:46
반응형

저장할 보류중인 변경 사항이 있는지 확인


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+를 사용하는 사용자를 위해 다음은 확장 메서드와 동일한 솔루션입니다.

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는 적절한 결과를 생성하지 않습니다.

참고 URL : https://stackoverflow.com/questions/3131347/check-if-there-are-any-pending-changes-to-be-saved

반응형