मैं किसी ऑब्जेक्ट संदर्भ में कई इकाइयां जोड़ रहा हूं।एक इकाई फ्रेमवर्क ऑब्जेक्ट संदर्भ को कैसे साफ़ करें?
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()
में दस्तावेज़ एक जोड़ने के लिए एक अपवाद फेंक देंगे।
इसलिए मुझे सत्यापन त्रुटि के मामले में पहले से ही जोड़े गए सभी दस्तावेज़ों को हटाना होगा। मैं निश्चित रूप से पहले सत्यापन कर सकता हूं और केवल सफलतापूर्वक सत्यापित होने के बाद ही सभी दस्तावेज जोड़ सकता हूं लेकिन दुख की बात यह पूरी समस्या को हल नहीं करती है - यदि SaveChanges()
विफल रहता है, तो सभी दस्तावेज़ अभी भी जोड़े गए हैं लेकिन सहेजे गए हैं।
मैं द्वारा
this.objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
सभी वस्तुओं लौटे अलग करने की कोशिश की लेकिन मैं एक अपवाद बताते हुए कि वस्तु संलग्न नहीं है हो रही है। तो मैं सभी अतिरिक्त लेकिन सहेजे गए ऑब्जेक्ट्स से कैसे छुटकारा पा सकता हूं?
मैं एक ObjectContext पुन: उपयोग नहीं की सिफारिश करेंगे। ऐसे परिदृश्य हैं जहां यह समझ में आता है, लेकिन वे बहुत दुर्लभ हैं। अब याद रखें कि ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग अधिक फुलाया जाता है, और यदि यह एक असंगत स्थिति में आता है (यानी कुछ आंशिक रूप से किया जाता है) तो आपको कुछ असंगत दुष्प्रभाव भी मिल सकते हैं। –