c# - Get entity navigation properties after insert -


मेरे पास निम्न 2 वर्ग हैं:

  सार्वजनिक वर्ग पुरस्कार {सार्वजनिक इन्ट आईडी} ; सेट; } सार्वजनिक इंक CampaignId {get; सेट; सार्वजनिक आभासी अभियान अभियान {प्राप्त करें; सेट; }} सार्वजनिक वर्ग अभियान {सार्वजनिक इन्ट आईडी (प्राप्त करें; सेट; } सार्वजनिक आभासी आइकलिंग & lt; रिवार्ड & gt; पुरस्कार {प्राप्त करें; सेट; }}  

इस के साथ मुझे सभी स्पष्ट आवश्यक सामान हैं जैसे डीबीसीटीन्टेक्स और मैपिंग्स

अब हम कहते हैं कि मैं एक पुरस्कृत इकाई बना रहा हूं और इसे इस तरह डालें:

  var इनाम = नया पुरस्कार {CampaignId = 1}; context.Set & LT; पुरस्कृत करें & gt;। () जोड़ें (इनाम); context.SaveChanges (); इनाम = संदर्भ .सेट & lt; रिवार्ड & gt; ()। सिंगलऑर डीफॉल्ट (ए = & gt; एक.आईडी == इनाम। आईडी); //reward.Campaign is empty  

मुझे स्पष्ट रूप से आईडी 1 के साथ एक अभियान है, इसलिए एफके बाधा खुश है इस सम्मिलित करने के बाद, मेरे इनाम इकाई में यह नया पहचान आईडी सेट है। अब समस्या ये है कि इनाम अभी भी सिर्फ पुरस्कार इनाम मैंने बनाया है। और इसके साथ, इनाम। अभियान संपत्ति शून्य है। ऐसा लगता है जैसे ईएफ स्मृति में सम्मिलित संस्थाओं को रखता है, और जब मैं करता हूं। SINGLEOrDefault (a => a.Id == इनाम। आईडी) यह केवल इकाई में स्मृति को वापस देता है, और एक नई प्रॉक्सी नहीं। यह शायद एक अच्छी बात है।

तो सवाल यह है कि: एक डालने के बाद नेविगेशन गुणों का उपयोग कैसे करता है या लोड करता है या प्रॉक्सी के रूप में नेविगेशन गुणों को भी एक नया प्रॉक्सी मिलता है।

क्या मैं शायद गलत तरीके से सम्मिलित हूं?

अगर मैं आपको सही ढंग से समझता हूँ, तो आप किसी विदेशी कुंजी प्रॉपर्टी के माध्यम से रिश्ते की स्थापना के बाद एक जटिल संपत्ति लोड करने की कोशिश कर रहा है।

सेव चेंज () जटिल गुणों को लोड करने के रास्ते में कुछ भी नहीं करता है। सबसे अधिक, यह आपकी प्राथमिक कुंजी प्रॉपर्टी को सेट करने जा रहा है यदि आप नई ऑब्जेक्ट जोड़ रहे हैं।

आपकी लाइन reward = context.Set & lt; Reward & gt; ()। SingleOrDefault (a = & gt; a आईआईडी == इनाम। आईडी); लोडिंग के रास्ते में कुछ नहीं करता है अभियान क्योंकि आपका इनाम ऑब्जेक्ट संदर्भ से जुड़ा नहीं है स्पष्ट रूप से उस जटिल ऑब्जेक्ट को लोड करने या इसे संलग्न करने के लिए ईएफ को बताएं कि आलसी लोडिंग का जादू हो।

तो, आपके context.SaveChanges (); < / Code> आपके पास इनाम के लिए तीन विकल्प हैं। अभियान :

  1. अटैच करें () संदर्भ के लिए इनाम ताकि अभियान कमज़ोर लोड किया जा सके (लोड किए जाने पर लोड किया गया)

      संदर्भ। रिवर्स। अटैच (इनाम);  

    नोट: आप केवल आलसी लोड इनाम। अभियान के भीतर संदर्भ के दायरे में सक्षम होंगे ताकि आप किसी भी संपत्ति के अंदर प्रवेश नहीं कर सकें संदर्भ जीवन काल, विकल्प 2 या 3 का उपयोग करें।

  2. मैन्युअल रूप से लोड () the अभियान संपत्ति

      संदर्भ। प्रवेश (इनाम) .रिफरेंस (सी = & gt; सी। अभियान) .लोड ();  
  3. मैन्युअल शामिल करें () the अभियान संपत्ति

    <पूर्व> इनाम = संदर्भ। रिवॉर्ड। शामिल करें ("अभियान")। सिंगलऑर डीफॉल्ट (आर = & gt; आरआईआईडी == इनाम। आईडी);

    हालांकि, मैंने सुझाव दिया है कि लोड के बाद से आपके पास पहले से ही इनाम मेमोरी में है

अधिक जानकारी के लिए संबंधित ऑब्जेक्ट अनुभाग लोड करना देखें।


Comments

Popular posts from this blog

java - Can't add JTree to JPanel of a JInternalFrame -

asp.net mvc - How to attach sql database to a javascript graph -

c# - How to know the number of Threads created and limit the Tasks accordingly -