2011-06-23 15 views
8

दूसरे शब्दों में, यदि मैं संस्थाओं को पुनः प्राप्त करता हूं, तो मेरे ऑब्जेक्ट कॉन्टेक्स्ट का निपटान करें, क्या मुझे अपनी सभी संस्थाओं को स्पष्ट रूप से अलग करना है?अगर मैं अपने ऑब्जेक्ट कॉन्टेक्स्ट का निपटान करता हूं, तो मेरी संस्थाएं अलग-अलग हैं?

उत्तर

2

संदर्भ के निपटारे के बाद आपकी संस्थाएं अलग हो जाती हैं। निम्नलिखित पोस्ट देखें:

Entity Framework Multiple Object Contexts

+1

http://stackoverflow.com/questions/2244843/entity-framework-detaching-entities-when-objectcontext- डिस्प्लेज्ड सुझाव है कि आपको अलग करने की आवश्यकता है? क्या वह सही नहीं है? – glosrob

5

नहीं है कि आप अपने संस्थाओं पर अलग कॉल करने के लिए नहीं है। हालांकि, अगर आप की तरह कुछ कार्य करें:

var people = Context.Person.Where(p => p.FirstName == "John"); 

और फिर अपने संदर्भ के निपटान, लोगों को एक अपवाद है, क्योंकि IEnumerable निष्पादन स्थगित कर गया है फेंक देते हैं। ऐसा करने:

var people = Context.Person.Where(p => p.FirstName == "John").ToList(); 

आपको अभी भी अपनी लोगों की सूची का उपयोग करने देगा।

इसके अलावा,

var john = Context.Person.FirstOrDefault(p => p.Id == 342); 

संदर्भ के बाद काम करेंगे निपटान किया जाता है, क्योंकि आप एक विशिष्ट इकाई और नहीं एक गणन दिलवाया है।

7

शायद यह Detach के अर्थ पर निर्भर करता है। संलग्न इकाई का अर्थ है कि संदर्भ इकाई के बारे में जानता है और यह इसके परिवर्तनों को ट्रैक करता है। यदि आप संदर्भ का निपटान करते हैं तो यह अब और परिवर्तनों को ट्रैक नहीं कर सकता है और इकाई अलग की तरह है। जैसा कि यहां एक वास्तविक अर्थ है।

यदि आप गतिशील प्रॉक्सी (पीओसीओ - गतिशील परिवर्तन ट्रैकिंग या आलसी लोडिंग) का उपयोग कर रहे हैं तो प्रॉक्सी स्वयं संदर्भ के आंतरिक रूप से पिछड़े संदर्भ रखती है लेकिन यह संदर्भ निपटान पर प्रतिक्रिया नहीं देती है। यह अभी भी संदर्भ रखता है (बीटीडब्ल्यू। यह कुछ गंदे स्मृति रिसाव का स्रोत हो सकता है)। यह दो स्थितियों में एक समस्या का कारण:

  • जब आप किसी अन्य संदर्भ के लिए ऐसी संस्था को संलग्न करने के लिए यह (तथ्य यह है कि मूल संदर्भ पहले ही मर चुका है बावजूद) कुछ अपवाद है कि इकाई केवल एक संदर्भ से ट्रैक किया जा सकता फेंक होगा की कोशिश करो।
  • जब आप नेविगेशन प्रॉपर्टी तक पहुंचने का प्रयास करते हैं जो उत्सुक लोड नहीं होता है तो आपको ObjectDisposedException मिल जाएगा क्योंकि प्रॉक्सी डिस्पोजेड संदर्भ पर आलसी लोडिंग को ट्रिगर करेगा।

इससे बचने का एकमात्र तरीका या तो गतिशील प्रॉक्सी अक्षम करना या संदर्भ को निपटाने से पहले इकाई को मैन्युअल रूप से अलग करना है। इसका एक और नुकसान है - अलग करने वाली इकाई संबंध तोड़ती है।

संबंधित मुद्दे