나는 특정 고객에 대한 모든 연락처를 저장하는 Contact 클래스를 포함하는 Customer 클래스를 가지고 있으므로 외래 키 관계로 연결됩니다.Entity Framework 4.0의 롤백
내 시나리오는 다음과 같습니다. 사용자가 연락처를 포함한 고객 정보를 편집 한 다음 "취소"버튼을 누르기로 결정했습니다. 연락처는 그리드에 바인딩되어 있으므로 편집/추가/삭제가 수행 될 때마다 캐시 된 데이터베이스 컨텍스트의 Contact 엔티티가 자동으로 업데이트됩니다. 연락처 엔티티에 대한 사용자의 모든 변경 사항을 어떻게 롤백 할 수 있습니까?
public static void CustomerRollback(Customer customer)
{
dbContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, customer);
dbContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, customer.Contacts);
}
하지만 그건 작동하지 않았다 :
나는은 다음 (답변 구글을 검색 한 후)했습니다. 다른 아이디어? 내 문제는 연락처 개체를 롤백하는 것입니다. 우선 무엇이 문제를 일으키는지는 그리드가 캐시 된 항목을 자동으로 업데이트한다는 것입니다. 그래서 취소하려고하면 각 연락처의 EntityState가 이미 수정 된 상태 (EntityState.Added, EntityState.Deleted 등)로 변경되었습니다. 연락처를 반복하고 EntityState 속성을 확인하고 그 속성을 확인해야합니까?감사 시저
이 컨텍스트는 작업 단위를위한 것입니다. 작업을 "롤백"하는 방법은 컨텍스트를 처리하는 것입니다. 당신이 너무 오랫동안 컨텍스트를 유지하고있는 것 같습니다. 이것은 광범위하고 부정적인 결과를 낳습니다. –
u와 Devart는 아래에서 컨텍스트 폐기를 제안했지만 데이터베이스에서 모든 데이터를 다시 가져와야한다는 의미는 아닙니다. 그것은 성능을 저해 할 것입니다. 그런데 응용 프로그램을 시작할 때이 문제가 너무 일찍 발생하기 때문에 컨텍스트가 너무 길어지는 문제는 아닙니다. 그리고 나는 그것을 테스트하는 유일한 사용자이므로 아무런 동시성 문제도 발생하지 않습니다. – Caesar
조기에 최적화 중입니다. 싱글 톤 컨텍스트를 사용하는 경우 장기간 성능이 떨어질 수 있습니다. 성능상의 상상력 때문에 올바른 방법을 거부하는 대신, 의도 한대로 컨텍스트를 사용하고 프로파일 링 및 포인트 수정을 통해 성능 문제를 해결하십시오. –