2009-01-14 16 views
5

मैं एक न्यूज़फ़ीड वस्तु जैसे मैप किया गया है:जब मैं अभिभावक को हटाता हूं तो मैं एनएचबीर्नेट को बाल संदर्भों को कैसे हटा सकता हूं?

<class name="NewsFeed"> 
    <id name="NewsFeedId"> 
     <generator class="guid"/> 
    </id> 

    <property name="FeedName" not-null="true" /> 
    <property name="FeedURL" not-null="true" /> 
    <property name="FeedIsPublished" not-null="true" /> 
</class> 

और उपयोगकर्ताओं को, जो चयनित का एक सेट हो सकता है खिलाती है कि वे में intereseted किया जा सकता है, तो जैसे मैप किया गया:

<class name="SystemUser"> 
    <id name="SystemUserId"> 
     <generator class="guid"/> 
    </id> 


    <set name="SelectedNewsFeeds" table="SystemUserSelectedNewsFeeds" cascade="all"> 
     <key column="SystemUserId" /> 
     <many-to-many column="NewsFeedId" class="NewsFeeds.NewsFeed, Domain"/> 
    </set> 

</class> 

क्या मैं चाहता हूँ ऐसा होता है जब मैं अभिभावक न्यूज़फिड को हटा देता हूं तो सभी चयनित न्यूज़फिड संदर्भों को भी हटाया जाता है, बिना प्रत्येक सिस्टम यूज़र लोड करने और हाथ से न्यूज़फ़ीड को हटाए बिना।

इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?

अद्यतन: का प्रयोग झरना = "सभी को नष्ट-अनाथ" के बदले "सभी" अभी भी एक अपवाद में परिणाम है जब न्यूज़फ़ीड को हटाने:

DELETE कथन संदर्भ बाधा के साथ विरोध हुआ "FKC8B9DF81601F04F4" । संघर्ष डेटाबेस "सिस्टम", तालिका "dbo.SystemUserSelectedNewsFeeds", कॉलम 'न्यूज़फिडआईडी' में हुआ।

उत्तर

2

JMCD

आपका दूसरा दृष्टिकोण:

एक अन्य विकल्प बीच में एक में शामिल होने के वर्ग के साथ कई-से-अनेक संबंध जो nHiberate माता-पिता का निर्धारण करने में सक्षम होगा तोड़ने के लिए है - रिश्ते संबंध और कैस्केड काम करना चाहिए।

वास्तव में nHibernate लोग उनके दस्तावेज़ में अनुशंसा करते हैं।

विदेशी एसोसिएशन मैपिंग का उपयोग न करें।

कोई वास्तविक कई-से-अनेक संघों के लिए अच्छा है usecases दुर्लभ हैं। अधिकांश समय में आपको "लिंक तालिका" में संग्रहीत अतिरिक्त जानकारी की आवश्यकता होती है।इस मामले में, का उपयोग इंटरमीडिएट लिंक क्लास में एक से कई संगठनों का उपयोग करना बेहतर है। वास्तव में, हम सोचते हैं कि अधिकांश संघ एक-से-कई और कई से एक हैं, तो किसी अन्य एसोसिएशन शैली का उपयोग करते समय सावधान रहना चाहिए और यह वास्तव में आवश्यक है तो खुद से पूछें।

दो-से-कई संगठनों का उपयोग करके "सदस्यता" में आसानी से अन्य विशेषताओं को जोड़ने के लिए लचीलापन जोड़ा जाता है, जैसे कि उस विशेष सदस्यता के लिए अधिसूचना प्राथमिकताएं।

0

परिवर्तन

cascade="all" 

cascade="all-delete-orphan" 

Reference

+0

हम्म .. मैं NHibernate 2.2 का उपयोग कर रहा है और ऐसा होता है: [MappingException: असमर्थित झरना शैली: हटाना-अनाथ] – jmcd

+0

आह .. झरना जाना चाहिए = "सभी को नष्ट-अनाथ" – jmcd

+0

Unfortunaltely कोई पासा: हटाने बयान संदर्भ बाधा "FKC8B9DF81601F04F4" के साथ संघर्ष किया। संघर्ष डेटाबेस "सिस्टम", तालिका "dbo.SystemUserSelectedNewsFeeds", कॉलम 'न्यूज़फिडआईडी' में हुआ। – jmcd

1

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

एक और विकल्प मध्य में एक जॉइन क्लास के साथ कई से अधिक रिश्तों को तोड़ना है, जो एनएचबेरेट माता-पिता के संबंधों को निर्धारित करने में सक्षम होगा और कैस्केड को काम करना चाहिए।

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

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