Nesne içeriğine birkaç varlık ekliyorum. Bazı belgelerin doğrulama geçmek ve bir başarısız olursaEntity Framework nesnesinin içeriği nasıl temizlenir?
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;
}
, doğrulama geçen tüm belgeler, nesne bağlamında ilave kalır. Nesne içeriğini temizlemek zorundayım çünkü tekrar kullanılabilir ve aşağıdakiler olabilir.
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 });
Bu
yüzünden yine yinelenen birincil anahtarın bir istisna durumu nesne bağlamı ve sonucuSaveChanges()
doküman A ekleyecektir.
Bu nedenle, tüm yeni eklenen belgeleri bir doğrulama hatası durumunda kaldırmam gerekiyor. Tabii ki ilk önce doğrulama işlemini gerçekleştirebilirim ve başarılı bir şekilde doğrulandıktan sonra tüm belgeleri ekleyebilirim, ancak ne yazık ki bu problemi çözmez - SaveChanges()
başarısız olursa, tüm belgeler yine de eklenmez ancak kaydedilmez.
this.objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
tarafından döndürülen tüm nesneleri ayırmak çalıştım ama nesne bağlı olmadığını belirten bir istisna alıyorum. Peki, eklenen tüm ancak kaydedilmemiş nesnelerden nasıl kurtulurum?
Bir ObjectContext yeniden değil öneriyoruz. Mantıklı olduğu senaryolar var ama bunlar çok nadirdir. Bir ObjectContext'in ne kadar çok şişirilmiş olduğunu kullandığını ve eğer tutarsız bir duruma girerse (yani, bir şeyler kısmen yapılırsa), bazı tutarsız yan etkilere de sahip olabileceğinizi unutmayın. –