2013-07-29 4 views
16

जैसा कि मैं समझता हूं, अगर मैं अभिभावक पंक्ति को हटा देता हूं, तो अगर मैं हटाए जाने पर कैस्केड चालू करता हूं तो उसके बच्चों को हटा दिया जाना चाहिए। हालांकि, मेरे परीक्षण से, यह बिल्कुल काम नहीं कर रहा है। इससे कोई फर्क नहीं पड़ता कि मैं WillCascaseOnDelete को सत्य या गलत पर सेट करता हूं, यह बस अपने बच्चों की विदेशी कुंजी को शून्य में सेट करता है। यह एक और समस्या पैदा कर रहा है कि मुझे विदेशी कुंजी को शून्य करने के लिए सेट करना है, अन्यथा, SaveChange अपवाद फेंक देगा। क्या यह एक दोष या वांछित व्यवहार है?एंटिटी फ्रेमवर्क में WillCascadeOnDelete कैसे काम करता है?

उत्तर

12

ऐसा इसलिए है क्योंकि आपकी विदेशी कुंजी (बच्चे) निरर्थक हैं। डिफ़ॉल्ट रूप से, जब माता-पिता को हटाते हैं, तो रिश्ते पर विदेशी कुंजी शून्य है EF माता-पिता को हटा देगी और विदेशी कुंजी को शून्य पर सेट कर देगी। यदि विदेशी कुंजी पूर्ण नहीं है तो यह बच्चे को हटा देगा (जिस व्यवहार को आप ढूंढ रहे हैं?)।

आप इस डिफ़ॉल्ट व्यवहार here

+3

मुझे एक ही समस्या का सामना करना पड़ रहा है, मेरी विदेशी कुंजी को 'IsRequired();' के रूप में सेट किया गया है, रिश्ते में '.WillCascadeOnDelete (true) 'है लेकिन मुझे मूल ऑब्जेक्ट को हटाने का प्रयास करते समय भी एक अपवाद प्राप्त होता है। –

+0

@UwConcept, यदि आप विदेशी कुंजी रिश्ते को 'IsRequired(); 'के रूप में निर्दिष्ट करते हैं, तो मैं अपवाद को फेंकने की अपेक्षा करता हूं क्योंकि एंटीटी फ्रेमवर्क मूल ऑब्जेक्ट को हटाने के बाद मान को' शून्य 'पर सेट नहीं कर सकता है। – weenoid

+3

@weenoid आपके उत्तर के लिए धन्यवाद। लेकिन क्या यह गैर-शून्य क्षेत्र में एक नल मान स्थापित करने के बजाय बच्चे ऑब्जेक्ट को हटाने के लिए और अधिक समझ में नहीं आता है? केवल मेरे दो सेंट्स। –

0

एसक्यूएल सर्वर में विदेशी कुंजी रिश्ता खिड़की पर सुनिश्चित करें कि बदल सकते हैं, आप हटाना नियम के रूप में कास्केड चयन किया है।

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