2010-05-12 9 views
5

खुराक nHibernate डेटाबेस स्तर कैस्केडिंग हटाने के साथ अच्छी तरह से खेलते हैं? मेरा मतलब यह है कि अगर मेरे पास सभी अनाथों को कैस्केड करने के लिए आरडीबीएमएस स्तर पर एक बाधा सेट है, तो क्या एनएचबर्ननेट अनुप्रयोग स्तर पर किसी भी कस्टम डिलीट तर्क का आह्वान करेगा यदि मैं एक इकाई को हटाना था, हालांकि nHibernate? या क्या मुझे आरडीबीएमएस स्तर से कैस्केडिंग हटाने को हटा देना चाहिए और उस व्यवहार को परिभाषित करके उस व्यवहार को परिभाषित करके केवल nHibernate की कैस्केडिंग डिलीट सुविधा का उपयोग करना चाहिए?NHibernate - क्या यह विदेशी कुंजी बाधाओं पर डेटाबेस-स्तरीय कैस्केडिंग विलोपन के साथ अच्छी तरह से काम करता है

धन्यवाद

उत्तर

5

NHibernate बस एक डेटा संग्रह के रूप में अपने आरडीबीएमएस व्यवहार करता है। ज्यादातर मामलों में, इसका मतलब है कि आप NHibernate को आपके लिए काम करने दे सकते हैं।

NHibernate को कैस्केडिंग डिलीट करने दें। इस तरह आप अपने तर्क और नियंत्रण को रख सकते हैं जहां यह संबंधित है (आपके आवेदन में), डेटाबेस में जहां आपके एप्लिकेशन का नियंत्रण कम या लचीलापन है।

संपादित करें:

हटाना कैस्केड पर हमेशा NHibernate के साथ शानदार प्रदर्शन प्रदर्शन नहीं करता। आपको बहुत सावधान रहना होगा कि आपके संग्रह संघों की कैस्केड सेटिंग्स क्या सेट हैं। यह आलेख देखें: http://eddii.wordpress.com/2006/11/16/hibernate-on-deletecascade-performance/

जब तक प्रदर्शन आपके लिए एक बड़ा मुद्दा नहीं है, यह आमतौर पर एनएचबीर्नेट को काम करने के लिए क्लीनर और कम समस्याग्रस्त है। जेमी इदे सही ढंग से बताते हैं:

चलाता के रूप में, NHibernate पता नहीं होगा कि एक वस्तु का डेटाबेस प्रतिनिधित्व एक डेटाबेस कार्रवाई की वजह से बदल गया है। मैं से अधिकतर मामलों में इस कारण से उनका उपयोग कर दूंगा।

+1

यह उप-स्थानिक है। एनएचबेर्नेट को डिलीट कैस्केड के बारे में पता है (डॉटजो का जवाब देखें) और यह बेहतर प्रदर्शन के लिए इसका उपयोग कर सकता है (माता-पिता को हटाते समय अलग-अलग बच्चों को डिलीट करने के लिए नहीं) –

2

यह डेटाबेस स्तर के कैस्केड के साथ काम कर सकता है। आप उन्हें मानचित्रण में घोषित कर सकते हैं, इसलिए hbm2ddl उपकरण on delete cascade उत्पन्न करेगा। विकल्प संग्रह की key संपत्ति में है।

<bag ...> 
    <key column="someId" on-delete="cascade" /> 
... 
</bag> 
+0

'ऑन-अपडेट' सेट करने के लिए किसी भी तरह से? –

1

यह निर्भर करता है कि "अच्छा खेलें" से आपका क्या मतलब है। आप NHibernate के साथ कैस्केडिंग डिलीट का उपयोग कर सकते हैं लेकिन आपको उन वस्तुओं को रीफ्रेश करने के लिए सावधान रहना होगा जो कैस्केडिंग डिलीट से प्रभावित हो सकते हैं। ट्रिगर्स के साथ, एनएचबीर्नेट को यह नहीं पता होगा कि डेटाबेस ऑपरेशन के कारण ऑब्जेक्ट का डेटाबेस प्रतिनिधित्व बदल गया है। मैं ज्यादातर मामलों में इस कारण से उनका उपयोग करने से बचूंगा।

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