POCO 엔터티에서 변경 내용 추적(Entity Framework)
POCO (Plain Old CLR Object) 엔터티에서는 변경 내용 추적 프록시 개체를 사용하거나 스냅숏을 사용하는 두 가지 방법으로 변경 내용을 추적할 수 있습니다.
프록시를 사용한 변경 내용 추적
변경 내용 추적 프록시 개체를 POCO 엔터티에 대해 만들 수 있도록 설정하는 경우 개체 그래프가 변경되면 해당 변경 내용이 Entity Framework 에 의해 자동으로 추적됩니다. 자세한 내용은 POCO 프록시를 만들기 위한 요구 사항(Entity Framework) 및 ID 확인, 상태 관리 및 변경 내용 추적(Entity Framework)을 참조하십시오. POCO 클래스에서 추가 요구 사항을 충족할 수 없거나 이러한 프록시 개체를 구체화하지 않으려는 경우에는 프록시 클래스가 생성되지 않도록 할 수 있습니다. 자세한 내용은 POCO 엔터티 사용(Entity Framework)를 참조하십시오.
스냅숏을 사용한 변경 내용 추적
프록시 개체를 만들지 않도록 설정한 경우 개체 그래프가 변경되어도 해당 변경 내용이 Entity Framework 에 의해 자동으로 추적되지 않습니다. 대신 DetectChanges 메서드를 사용하여 변경 내용을 보고해야 합니다.
개체가 컨텍스트에 연결되면 해당 속성 값의 스냅숏이 만들어집니다. DetectChanges 메서드가 호출되면 연결된 개체 그래프가 ObjectStateManager와 동기화됩니다. 개체를 연결하는 방법은 개체 연결 및 분리(Entity Framework)를 참조하십시오. DetectChanges 메서드는 다음 작업을 수행하여 개체 그래프를 상태 관리자와 동기화합니다.
그래프의 새 개체를 개체 컨텍스트에 연결합니다. 주 개체를 쿼리하고 새 종속 개체와의 연결을 만들면 이 작업이 수행됩니다.
현재 속성 값을 원래 값의 스냅숏과 비교한 결과에 따라 개체 상태를 업데이트합니다(스냅숏이 이미 만들어진 경우).
자세한 내용은 방법: POCO 엔터티의 변경 내용 검색을 참조하십시오.
참고: |
---|
POCO 엔터티에 복합 형식 속성이 포함된 경우 복합 형식 인스턴스의 멤버에 대한 변경 내용은 해당 엔터티에 변경 내용 추적 프록시가 있더라도 스냅숏 메서드를 통해 검색됩니다.그러나 복합 형식의 새 인스턴스가 속성에 할당되는 경우 속성의 변경 내용은 다른 속성과 동일한 방식으로 추적됩니다. |
개체와 ObjectStateManager가 동기화되면 개체 추가, 연결 또는 삭제, Refresh 메서드 호출, MergeOption 값으로 PreserveChanges를 사용하는 쿼리 실행 등 ObjectStateManager를 사용하는 다른 작업에서는 예측할 수 없는 결과가 생성될 수 있습니다.
연결된 POCO 엔터티의 값에 대한 변경 내용과 ObjectStateManager를 동기화 상태로 유지하는 것은 중요하므로 기본적으로 SaveChanges 메서드는 제일 먼저 DetectChanges 메서드를 호출합니다. 그래프를 변경한 경우 다음 메서드를 사용하려면 SaveChanges를 호출하기 전에 DetectChanges를 호출하는 것이 좋습니다.
MergeOption 값으로 PreserveChanges를 사용하여 실행되는 모든 쿼리 또는 다른 개체 로드 작업
ObjectContext의 AddObject, Attach, AttachTo, DeleteObject, Detach, GetObjectByKey, TryGetObjectByKey, ApplyCurrentValues, ApplyOriginalValues, Refresh 또는 ChangeObjectState 메서드
ObjectStateManager의 GetObjectStateEntry, TryGetObjectStateEntry, GetObjectStateEntries 또는 ChangeRelationshipState
ObjectStateEntry의 모든 메서드