9

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

<class name="Person" table="Person_Person" > 

    <id name="Id" type="Int64" unsaved-value="0"> 
     <generator class="native" /> 
    </id> 

    <bag name="Families" inverse="true" table="Person_Family" cascade="all-delete-orphan" > 
     <key column="Person_id_fk"/> 
     <one-to-many class="Domain.Entities.Family,Domain.Entities"/> 
    </bag> 

    </class> 

इस परियोजना में, मैं आईडी के आधार पर एक व्यक्ति को हो जाओ तो परिवारों व्यक्ति के एक परिवार को हटा दें।

Person person = SessionInstance.Get<Person>(id); 
foreach (Family fam in person.Families) 
    if (fam.Name == "Jaun") 
     SessionInstance.Delete(fam); 

परिवार हटाई नहीं जाती, क्योंकि इस संदेश से एक अपवाद: deleted object would be re-saved by cascade (remove deleted object from associations)[Domain.Entities.Family#167]

मैं व्यक्ति के एक परिवार को कैसे नष्ट कर सकते हैं?

उत्तर

13

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

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

+2

'व्यक्ति। फामिलीज। रिमूव (fam); सत्र इंस्टेंस। सेव (व्यक्ति); ' –

+0

@ कोले डब्ल्यू: बिल्कुल। – KeithS

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