2011-01-10 16 views
8
using(DataContext db = new DataContext()) 
{ 
    var result = db.SomeTable.ToList(); 
    return result; 
} 

समस्या का परिणाम लौटने के बाद समस्या है, कनेक्शन बंद है और क्योंकि यह बंद है, जब मैं किसी भी बच्चे तत्वों तक पहुंचने का प्रयास कर रहा हूं तो यह दुर्घटनाग्रस्त हो जाता है। ऐसा इसलिए होता है क्योंकि आलसी लोडिंग को सही (डिफ़ॉल्ट) पर सेट करने से पहले कभी भी बच्चे के संबंधों को लोड नहीं किया जाता है और कनेक्शन बंद होने के बाद मैं उनका उपयोग शुरू करता हूं। तो इसे हल करने का सबसे अच्छा तरीका कैसा है?इकाई फ्रेमवर्क आलसी लोडिंग

मैंने आलसी लोडिंग को बंद करने की कोशिश की है, लेकिन फिर उसने किसी भी बच्चे संबंध तालिका को लोड नहीं किया है।

उत्तर

14

तुम हमेशा स्पष्ट रूप से अपने बच्चे को संग्रह लोड सकता है:

var result = db.SomeTable.Include("SomeChildCollectionName") 
         .Include("AnotherChildCollectionName") 
         .ToList(); 
+0

ठीक है, लेकिन अगर मैं स्पष्ट रूप से लिखने के बिना सभी बाल तत्वों को लोड करना चाहता हूं तो इसमें शामिल हैं ("ElementName")? बहुत सारे बच्चे तत्व हैं, यही कारण है कि – syncis

+0

@ user554978 - यह समर्थित नहीं है। आपको शामिल करने या कनेक्शन को खोलने के लिए सभी बच्चों को स्पष्ट रूप से लोड करना होगा और आलसी लोडिंग को अपनी चीज़ों को करने की अनुमति देना होगा। –

+0

आह ठीक है बहुत बहुत धन्यवाद! – syncis

3

आप .include() विधि का उपयोग कर सकते हैं।

var result = db.SomeTable.Include("ChildEntitySet").ToList(); 

तुम भी लौटने से पहले एक result.ChildEntitySet.Load() कॉल जोड़ सकते हैं। यह कम कुशल है क्योंकि इसके परिणामस्वरूप सर्वर पर दो यात्राएं होंगी। .clude() विधि का उपयोग एक जॉइन के साथ एक SQL स्टेटमेंट जेनरेट करेगा जो सर्वर पर केवल एक यात्रा की अनुमति देगा।

+1

ठीक है लेकिन क्या अगर मैं स्पष्ट रूप से शामिल हैं ("ElementName ') लिखने के लिए बिना सभी बच्चे तत्वों लोड करना चाहते हैं? बहुत सारे बच्चे तत्व हैं, यही कारण है कि – syncis

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