c# - Cascade on delete - Complex type mapped to a table -
कृपया निम्नलिखित संबंधों पर विचार करें:
कार (संस्था) 1 -------- --------------> * पहियों (इकाई)
पहिया (इकाई) 1 ---------> 1 अखरोट (जटिल प्रकार)
व्हील (इकाई) 1 ---------> 1 रिम (जटिल प्रकार)
दोनों अखरोट और रिम जटिल प्रकार मैट किए जाते हैं जो कि पागल और रिम नामक टेबल हैं। मैं नट और रिम प्राथमिक कुंजी के रूप व्हील आईडी का उपयोग कर रहा
अब, जब कोड का उपयोग कर कार को हटाने का प्रयास है, मैं निम्नलिखित अपवाद:।
System.InvalidOperationException: ऑपरेशन विफल रहा: रिश्ते को बदला नहीं जा सका क्योंकि एक या अधिक विदेशी कुंजी गुण गैर-नाकाम करने योग्य हैं जब किसी रिश्ते में कोई परिवर्तन किया जाता है, तो संबंधित विदेशी-प्रमुख संपत्ति को शून्य मान पर सेट किया जाता है। यदि विदेशी कुंजी सुस्त मूल्यों का समर्थन नहीं करती है, तो एक नए रिश्ते को परिभाषित किया जाना चाहिए, विदेशी-प्रमुख संपत्ति को एक अन्य गैर-रिक्त मान निर्दिष्ट किया जाना चाहिए, या असंबंधित ऑब्जेक्ट को हटा दिया जाना चाहिए System.Data.Entity.Core.Objects.ObjectContext.PrepareToSaveChanges (SaveOptions विकल्प) System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal पर (SaveOptions विकल्प, बूलियन executeInExistingTransaction) System.Data.Entity.Core.Objects पर पर। ObjectContext.SaveChanges (SaveOptions विकल्प) System.Data.Entity.Internal.InternalContext.SaveChanges पर () System.Data.Entity.Internal.LazyInternalContext.SaveChanges पर () System.Data.Entity.DbContext.SaveChanges पर () जब MS- SSMS में यह करने के लिए प्रयास कर रहा है, मैं इस त्रुटि मिलती है: हटाने बयान संदर्भ बाधा "FK_dbo.Nuts_dbo.Wheel_Id" के साथ विरोध हुआ। संघर्ष डेटाबेस "DatabaseName", टेबल "dbo.Nuts", स्तंभ 'Id' में हुई।
को देखते हुए, कि जटिल प्रकार एक इकाई के लिए मानकों की आवश्यकता है और एक एक-से-एक रिश्ता है कर रहे हैं, क्यों इस परिदृश्य में डिफ़ॉल्ट रूप से हटाए जाएंगे? दूसरा, सभी संबद्ध नट्स और रिम के साथ कार और इसके संबंधित कई पहियों को हटाने के बारे में कैसे जाना चाहिए। अंत में, मेरे मामले में, एक कार में हजारों पहियों हैं क्या यह कोड में एक अच्छा विचार है या संग्रहीत प्रक्रियाओं का उपयोग?
धन्यवाद।
जैसा कि बेन रॉबिन्सन ने अपनी टिप्पणी में उल्लिखित किया है, [कॉम्प्लेक्स टाइप] के साथ श्रेय देने वाले वर्गों का उद्देश्य है कि उनके गुणों में सम्मिलित प्रकार की तालिका के भीतर स्तंभों को मैप किया गया हो। कोई अखरोट या रिम टेबल नहीं होना चाहिए यदि यह वांछित व्यवहार नहीं है तो उन्हें जटिल प्रकार नहीं होना चाहिए।
मान लीजिए कि उन्हें जटिल प्रकार नहीं होना चाहिए और यह काम करना चाहिए कि वे हटाने का कारण क्यों नहीं हैं। अखरोट पर ध्यान केंद्रित करना, और यह मानते हुए कि आप धाराप्रवाह कॉन्फ़िगरेशन का उपयोग नहीं कर रहे हैं, मुझे संदेह है कि आपको अखरोट पर पहिया के लिए एक नेविगेशन प्रॉपर्टी और व्हील आईडी की आवश्यकता होगी व्हील आईडी [कुंजी] और [विदेशी के साथ चिह्नित किया जाएगा (व्हील)], मुझे लगता है। मुख्य बिंदु नेविगेशन संपत्ति है
धाराप्रवाह विन्यास के साथ आप व्हील के लिए नेविगेशन संपत्ति, व्हील के लिए विन्यास में होता है और उसके बाद, आप होगा:
HasRequired (पहिया = & gt; wheel.Nut )। के साथ अनिवार्य निर्भर (अखरोट = & gt; नट। वीयल);
नोट करने के लिए एक अन्य मुद्दा यह है कि कैस्केड डिलीट, यदि यह आपके स्वाद पर उत्पन्न नहीं है, तो एक विधि तर्क के माध्यम से विदेशी कुंजी निर्माण में माइग्रेशन के अंदर संशोधित किया जा सकता है।
अंत में, बैच हटाने के बारे में अपने प्रश्न का उत्तर देने के लिए: यदि आप कार को हटा देते हैं और यह कैसकेड को व्हील हटाता है, तो यह डाटाबेस में मिटा दिया जाएगा और यह तेज़ होना चाहिए यदि आप एक कार के लिए कई पहियों के अलग-अलग हटाना चाहते हैं तो एंटीटी फ़्रेमवर्क एक्सटेन्शंस पर एक नज़र डालें:
Comments
Post a Comment