개체 컨텍스트에 여러 엔터티를 추가하려고합니다. 문서의 일부가 유효성 검사를 통과하고 하나가 실패하면Entity Framework 개체 컨텍스트를 정리하는 방법은 무엇입니까?
try
{
forach (var document in documents)
{
this.Validate(document); // May throw a ValidationException.
this.objectContext.AddToDocuments(document);
}
this.objectContext.SaveChanges();
}
catch
{
// How to clean-up the object context here?
throw;
}
은 유효성 검사를 통과하는 모든 문서는 개체 컨텍스트에 추가 된 상태로 유지됩니다. 재사용 될 수 있고 다음과 같은 일이 발생할 수 있기 때문에 객체 컨텍스트를 정리해야합니다.
var documentA = new Document { Id = 1, Data = "ValidData" };
var documentB = new Document { Id = 2, Data = "InvalidData" };
var documentC = new Document { Id = 3, Data = "ValidData" };
try
{
// Adding document B will cause a ValidationException but only
// after document A is added to the object context.
this.DocumentStore.AddDocuments(new[] { documentA, documentB, documentC });
}
catch (ValidationException)
{
}
// Try again without the invalid document B. This causes an exception because
// of a duplicate primary key - document A with id 1 is added a second time.
this.DocumentStore.AddDocuments(new[] { documentA, documentC });
이
다시 때문에 중복 된 기본 키의 예외가 발생합니다 개체 컨텍스트와 결과SaveChanges()
문서 A를 추가합니다.
그래서 유효성 검사 오류의 경우 이미 추가 된 모든 문서를 제거해야합니다. 물론 유효성 검사를 먼저 수행하고 성공적으로 검증 된 후에 만 모든 문서를 추가 할 수는 있지만 슬프게도이 문제는 전체 문제를 해결하지 못합니다. SaveChanges()
이 실패하면 모든 문서가 추가되었지만 저장되지 않은 상태로 남아 있습니다.
this.objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
에 의해 반환 된 모든 객체를 분리하려하지만 개체가 연결되지 않는다는 내용의 예외를 얻고있다. 그렇다면 추가되었지만 저장되지 않은 모든 객체를 제거하려면 어떻게해야합니까?
내가 ObjectContext는 재사용하지 않는 것이 좋습니다 것입니다. 그것이 의미가있는 시나리오가 있지만 매우 드뭅니다. ObjectContext가 사용되는 시간이 길어질수록 부풀어 오르는 시간이 길어지고 일관성없는 상태 (즉, 무언가가 부분적으로 완료 됨)가되면 부작용이 발생할 수 있습니다. –