Entity Framework 7에서 수정 된 개체 목록 가져 오기

.net c# dbcontext entity-framework entity-framework-core

문제

나는 혼란 스럽다. Entity Framework 7로 업그레이드하고 일반적으로 변경되기 전에 모든 수정 된 개체의 목록을 가져올 수 있도록 DbContext 내의 SaveChanges를 재정의합니다. 궁극적으로 저는 데이터베이스에서 이전 버전을 추적하는 스크립트를 실행합니다. Entity Framework 6에서는 다음과 같이 모델 변경을 수행합니다.

var oc = ((IObjectContextAdapter)this).ObjectContext;
var modifiedItems = oc.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Deleted);

List<ObjectStateEntry> ModifiedObjlist = modifiedItems.ToList();

그러나 이제 ObjectContext 가 Entity Framework 7에서 제거되었으므로 Entity Framework 7에서 수정 된 개체의 목록을 어떻게 얻을 수 있습니까?

수락 된 답변

DbContext.ChangeTracker 를 사용할 수 있습니다.

var modifiedEntries = context.ChangeTracker
       .Entries()
       .Where(x => x.State == EntityState.Modified)
       .Select(x =>x.Entity)
       .ToList();

인기 답변

@dotctor의 코드는 어떤 경우에는 작동하지 않을 수 있습니다.

변경 추적기가 컨텍스트에 의해 관리되는 엔티티와 관련하여 최신 정보를 갖지 않을 수있는 특정 인스턴스가 있으므로 변경 추적기가 인식하지 못하게 엔티티를 수정 / 추가 / 삭제할 수 있습니다. 이 경우를 피하기 위해 다음과 같은 조건에서 @dotctor의 코드를 래핑합니다.

if(context.ChangeTracker.HasChanges())
{
  ...
}


ChangeTracker.HasChanges Microsoft 요약 () :

DbContext.SaveChanges 또는 DbContext.SaveChangesAsync가 호출 된 경우 이러한 변경 내용이 데이터베이스로 전송되도록 새 항목, 삭제 된 항목 또는 변경된 항목이 추적되는지 확인합니다. ChangeTracker.AutoDetectChangesEnabled가 false로 설정되어 있지 않으면이 메서드는 ChangeTracker.DetectChanges를 호출합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.