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();
+1은 일반적으로 올바른 경로에 있지만, 'Count()> 0'이 아닌'Any()'를 사용하십시오. –
오늘은이 blogpost를 읽으십시오. 감사합니다;) – Yakimych
EF는 값이 정말로 다른지 ('EntityState.Modified'의 경우) 확인하지 않습니다. e.q. 값을 단독으로 바꾸면 EF는'1 modified object'를 반환합니다. 값이 다른지 미리 확인해야합니다. –
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가 올바른 결과를 생성하지 않습니다.
EF 6부터는 context.ChangeTracker.HasChanges()
입니다.
최신 답변. – Zapnologica
2016 년 현재이 답변입니다, IMHO. – ozgur
다른 사람들이 언급 한 것처럼 지금은 이것이 가장 좋은 대답입니다. – Yokomoko
- 1. BindingSource를 사용하여 보류중인 변경 사항이 있는지 어떻게 알 수 있습니까?
- 2. 엔티티 프레임 워크 : 특정 엔티티에서 저장할 변경 사항이 있는지 확인하십시오.
- 3. 모든 변경 사항이 주석 처리되었는지 확인하십시오.
- 4. SPFILE에 설정된 보류중인 변경 사항보기
- 5. jtextarea의 변경 사항이 있는지 여부를 확인하는 방법은 무엇입니까?
- 6. Eclipse에서 TFS 보류중인 변경 창이 변경되었습니다.
- 7. 오라클 : 보류중인 거래가 있는지 확인하는 방법은 무엇입니까?
- 8. /후보자가 표시 할 때 '보류중인 변경 없음'보고서가 병합/폐기됩니다.
- 9. 개체에 포커스가 있는지 확인하십시오.
- 10. WCF 서비스가 있는지 확인하십시오.
- 11. 공백이 문자열에 있는지 확인하십시오.
- 12. 사용자가 있는지 확인하십시오 (계속 ...)
- 13. 컨트롤이 화면에 있는지 확인하십시오.
- 14. [i]가 있는지 확인하십시오.
- 15. 파일이 열려 있는지 확인하십시오.
- 16. 기본 뷰어가 있는지 확인하십시오.
- 17. 목록이 있는지 확인하십시오.
- 18. 전자 메일이 있는지 확인하십시오.
- 19. 요소가 있는지 확인하십시오.
- 20. 텍스트 파일이 있는지 확인하십시오.
- 21. BSTR이 비어 있는지 확인하십시오.
- 22. ID가 데이터베이스에 있는지 확인하십시오.
- 23. 배열 색인이 있는지 확인하십시오.
- 24. DB에 역할이 있는지 확인하십시오.
- 25. 속성이 있는지 확인하십시오.
- 26. NSFetchedResultsController가 비어 있는지 확인하십시오.
- 27. 함수에 데코레이터가 있는지 확인하십시오.
- 28. jQuery : 이미지가 있는지 확인하십시오.
- 29. 클래스가 인스턴스화되어 있는지 확인하십시오.
- 30. 사용자 이름이 있는지 확인하십시오.
context.savechanges()가 자동으로 이것을 확인하지 않습니까? 내가 요청하는 이유는 몇몇 사람들이 다음을 시도 할 것이라고 생각한다는 것입니다 :'if (db.ChangeTracker.HasChanges()) {await db.SaveChangesAsync(); }' – Zapnologica