2008-10-15 3 views
6

जब session.Save बुला मैं एक NHibernate.PersistentObjectException बार आ रही है जो एक गैर-आरंभिकृत प्रॉक्सी को बचाने के लिए पारित कर दिया() की वजह से है पारित कर दिया। अगर मैं अपनी कैस्केड सेटिंग्स के साथ परेशान हूं तो मैं इसे दूर कर सकता हूं, लेकिन फिर बच्चे की वस्तुओं को बचाया नहीं जा रहा है।NHibernate: अप्रारंभीकृत प्रॉक्सी को बचाने के लिए() और() झरना

केवल अन्य फिक्स मैं पाया है मेरी DefaultSaveEventListener के लिए निम्न जोड़कर है।

protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source) 
    { 
     if (!NHibernateUtil.IsInitialized(obj)) 
      NHibernateUtil.Initialize(obj); 

     return base.ReassociateIfUninitializedProxy(obj, source); 
    } 

यह स्पष्ट रूप से एक आदर्श समाधान नहीं है।

कोई विचार?

+0

क्या आपने कभी इसका बेहतर समाधान प्राप्त किया है? फिलहाल मुझे उस दृष्टिकोण का उपयोग करना है जिसका आपने उल्लेख किया है कि ReassociateIfUninitializedProxy को ओवरराइड करना है। –

+0

मुझे अभी तक कोई समाधान नहीं मिला है ... – jonnii

+0

क्या आप इस समस्या को allyour ऑब्जेक्ट्स या एक विशेष ऑब्जेक्ट के साथ देख रहे हैं। यदि यह एक विशेष वस्तु है तो क्या आप अपने मॉडल और मैपिंग के साथ प्रश्न अपडेट कर सकते हैं? – Baz1nga

उत्तर

2

आप एक बच्चे वस्तु एक रूट कुल इकाई पर एक सूची में है कि के साथ काम करने की कोशिश कर रहे हैं? यदि आप हैं, तो आपको रूट के साथ काम करने, बच्चे के पार करने, परिवर्तन करने और रूट को बचाने की ज़रूरत है, न कि बच्चे को।

+0

मैं अब उस परियोजना पर काम नहीं कर रहा हूं, लेकिन मुझे लगता है कि शायद यही कारण होगा। – jonnii

2

मुझे एक ही समस्या थी।

ठीक आसान था: use ISession.Get() और नहीं ISession.Load()

+0

वृद्धि, मरे हुओं में से वृद्धि! – Jaguar

+0

मुझे यह त्रुटि मिल रही है और मेरे पास ISession.Load या इसके किसी भी ओवरलोड का कोई संदर्भ नहीं है। – Rabid

4
वहाँ

एक कस्टम DefaultSaveEventListener कोई overidden या विस्तारित व्यवहार युक्त उपवर्ग की उपस्थिति मात्र निम्नलिखित विन्यास XML का उपयोग, मेरे लिए इस अपवाद को गति प्रदान करने के लिए पर्याप्त है:

<event type="save-update"> 
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" /> 
</event> 

मैं इस चर्चा को जारी रख रहा हूं in this question

अद्यतन:

मैं गलती से DefaultSaveEventListener बजाय DefaultSaveOrUpdateEventListener से ली गई थी, सुपर क्लास बदलते बनाया इस समस्या मेरे लिए चले जाओ।

+2

आह बेवकूफ मुझे 'DefaultSaveOrUpdateEventListener' के बजाय 'DefaultSaveEventListener' से प्राप्त किया गया था, इस समस्या को दूर करने वाले सुपरक्लास को बदलकर। – Rabid

+0

+1 - यह कारण था - और यह त्रुटि - मुझे यह त्रुटि प्राप्त करने के लिए। मैं सुझाव देता हूं कि आपकी टिप्पणी को आपके उत्तर में ले जाएं, क्योंकि यह सहायक और सटीक कारण है कि किसी को यह त्रुटि क्यों मिल सकती है। –