2015-06-01 4 views
10

मुझे एंटिटी फ्रेमवर्क 4 में किसी ऑब्जेक्ट ऑब्जेक्ट के संदर्भ को लोड करने में समस्याएं आ रही हैं। आलसी लोडिंग के कारण मूल ऑब्जेक्ट (हालत) के संदर्भ को बच्चे ऑब्जेक्ट (डिस्काउंट लेवल) पर लोड नहीं किया गया है, इसलिए मैं के साथ लोड करने का प्रयास:इकाई फ्रेमवर्क 4 लोडिंग संदर्भ अपवाद

if(!this.ConditionReference.IsLoaded) this.ConditionReference.Load(); 

लेकिन यह निम्न अपवाद फेंकता है: क्योंकि यह एक ObjectContext

से जुड़ी नहीं है

एंटिटी संदर्भ लोड नहीं हो सका

तो अगर मैं वस्तु संदर्भ के लिए मौजूदा बच्चे वस्तु (DiscountLevel) संलग्न करने के लिए (और फिर बाद में माता-पिता संदर्भ लोड) की कोशिश:

context.AttachTo("tblDiscountLevel", this); 

मैं निम्न अपवाद प्राप्त करें:

एक ऑब्जेक्टस्टेट प्रबंधक में एक ही कुंजी वाला ऑब्जेक्ट पहले से मौजूद है। मौजूदा वस्तु अलग राज्य में है। ऑब्जेक्टस्टेट मैनेजर में एक ऑब्जेक्ट को फिर से जोड़ा जा सकता है यदि यह अतिरिक्त स्थिति में है।

मुझे लगता है कि मैं पहली जगह में कुछ गलत कर रहा हूं, लेकिन मैं यह नहीं समझ सकता कि क्या। इसलिए इस विषय पर हर मदद की बहुत सराहना की जाती है। अगर आपको अतिरिक्त जानकारी चाहिए तो मुझे बताएं!

+0

क्या आपने क्वेरी में मूल ऑब्जेक्ट को शामिल करने का प्रयास किया है? देखें: http://stackoverflow.com/questions/19319116/include-vs-load-performance-in-entityframework – Stefan

+0

मैंने माता-पिता को शामिल करने का प्रयास किया है लेकिन संदर्भ लोड नहीं किया जाएगा। हो सकता है कि मैं कुछ गलत कर रहा हूं ... 'context.tblDiscountLevel.Include (" condition ")। कहाँ (lv => lv.LevelDiscountID == this.LevelDiscountID) .सूची()' –

+0

क्या आप 'कोड पहले' का उपयोग कर रहे हैं या एक edmx? कोड का उपयोग करते समय माता-पिता को नेविगेशन प्रॉपर्टी 'आभासी' होना चाहिए और इसे बॉक्स से बाहर करने के लिए कुछ नामकरण सम्मेलन होना चाहिए। यदि आप एडीएमएक्स का उपयोग कर रहे हैं तो मेरा अनुभव यहां आपकी मदद करने के लिए पर्याप्त नहीं है। – Stefan

उत्तर

1

मैंने समस्या पर ठोकर खाई और इसे उपरोक्त कोड के साथ कुछ भी करने की ज़रूरत नहीं थी: डिस्काउंटलेवल में विभिन्न ओवरराइट ऑनचेंज-विधियों में कुछ गणनाएं हैं जो असफल हो जाती हैं अगर उन्हें बहुत जल्दी कहा जाता है - इस मामले में डीबी से प्रारंभिक लोडिंग। इसके परिणामस्वरूप चाइल्ड ऑब्जेक्ट को ठीक से शुरू नहीं किया जा सकता - ऐसा लगता है कि इसे बाहर से लोड नहीं किया गया था।

प्रारंभिक भार पर ऑनचेंज-विधियों के निष्पादन को दबाए गए एक साधारण बूल-वेरिएबल को कार्यान्वित करने से सब कुछ अपेक्षित काम करता है। एंटिटी फ्रेमवर्क प्रदान करने वाली सुविधाओं के साथ एक और अधिक सुरुचिपूर्ण समाधान हो सकता है, लेकिन यह मेरे लिए काम करता है।

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