हम विदेशी कुंजी संबंधों के साथ पहले इकाई फ्रेमवर्क कोड का उपयोग कर रहे हैं। हम अपने आवेदन में एक संस्था आईसीओलेक्शन से वस्तुओं को हटाने के तरीकों की जांच कर रहे हैं।क्या बचपन से बच्चे को हटाने और SaveChanges पर समस्याओं को हल करना संभव है?
जब हमारे पास बाल संबंधों के साथ एक इकाई होती है तो हम ऐड विधि का उपयोग करके ऑब्जेक्ट को सीधे अपने आईसीलेक्शन में जोड़ सकते हैं। अब जब आप को दूर का उपयोग आप त्रुटि
System.InvalidOperationException संदेश हुआ मिलता है = आपरेशन विफल रहा है: क्योंकि एक या के और अधिक विदेशी कुंजी गुण गैर-व्यर्थ है रिश्ता बदला नहीं जा सका। जब संबंध में कोई परिवर्तन किया जाता है, तो संबंधित विदेशी-कुंजी संपत्ति शून्य मान पर सेट होती है। यदि विदेशी कुंजी शून्य मानों का समर्थन नहीं करती है, तो एक नया रिश्ते परिभाषित किया जाना चाहिए, विदेशी-कुंजी प्रॉपर्टी को गैर-शून्य मान असाइन किया जाना चाहिए, या असंबंधित ऑब्जेक्ट को हटा दिया जाना चाहिए।
मुझे समझ में आता है क्योंकि संग्रह पर निकालें केवल विदेशी कुंजी को हटाकर रिश्ते को हटा देता है। हम अपनी इकाई में हमारे व्यापार तर्क लिखना चाहते थे और हटाने की अनुमति देते थे।
तो ऑर्डर रिपॉजिटरी से रूट इकाई को बाहर निकालें, उदाहरण के लिए इकाई की कुछ विशिष्ट विधि उदा। Order.AddOrderline(Orderline orderline)
यह आदेश virtual ICollection<OrderLine> OrderLines
लेकिन हम नहीं है क्योंकि बस ICollection से निकालने बचत परिवर्तन पर एक त्रुटि का कारण बनता है Order.CancelOrderline(int orderLineId)
की तरह कोड लिख सकते हैं करने के लिए एक ऑर्डर लाइन कहते हैं।
ऑब्जेक्ट संग्रहों में केवल छेड़छाड़ करके इसे प्राप्त करने के लिए वैसे भी ऐसा प्रतीत नहीं होता है। जाहिर है हम सीधे संदर्भ से हटा सकते हैं। हालांकि मैं इसे इकाई का हिस्सा बनाना चाहता हूं। क्या हम एंटीटी फ्रेमवर्क की सेवचेंज घटना पर कोई विदेशी कुंजी नहीं रख सकते हैं? स्पष्ट रूप से ईएफ को बताने की जरूरत है कि अगर उनके पास शून्य विदेशी कुंजी है तो कौन सी संस्थाओं को हटाया जा सकता है।
वर्तमान में हम एक भंडार पैटर्न का उपयोग कर रहे हैं ताकि नियंत्रक के पास संदर्भ तक पहुंच न हो। मैं ऑर्डर रिपॉजिटरी पर ऑर्डरलाइन रिपोजिटरी या ऑर्डरलाइन विधि को हटा सकता हूं। हालांकि बस सोच रहा है कि दृढ़ता तंत्र के संदर्भ के बिना इकाई पर कोड लिखना संभव था।
विचार? क्या हम इस सब गलत के बारे में जा रहे हैं? क्या अन्य ओआरएम आपको बाल संग्रह से हटने की अनुमति देते हैं?
आह इसलिए यदि मैं बाल संस्थाओं पर एक समग्र कुंजी बना देता हूं तो ईएफ मेरे लिए इस से निपटेंगे। अब यह काफी आकर्षक लगता है। – GraemeMiller
यह बहुत अच्छा था लेकिन मुझे [कुंजी, कॉलम (ऑर्डर = 0), डाटाबेस जेनरेटेड (डाटाबेस जेनरेटेडऑप्शन.इडेन्टिटी) जोड़ने की जरूरत है] सार्वजनिक int ऑर्डरलाइन Id {get; सेट; } पहचान सम्मिलन के बारे में शिकायत नहीं करने के लिए। – GraemeMiller
@GraemeMiller: यही मेरा मतलब है "* यदि आप चाहते हैं तो आप ऑर्डरलाइन को एक स्वत: उत्पन्न पहचान बना सकते हैं * :) :) मैं यह उल्लेख करना भूल गया कि आपको * मॉडल * (डेटाबेस जेनरेटेडऑप्शन के साथ) * और * में ऐसा करने की ज़रूरत है डेटाबेस*। – Slauma