2012-02-06 15 views
6

जब मैं session.update (ऑब्जेक्ट) का उपयोग करता हूं तो मुझे त्रुटि नीचे मिलती है और मैं इस त्रुटि को कैसे सुधार सकता हूं? मैं भी कोशिश की है Session.evict (वस्तु) अभी भी यह नीचे त्रुटिएक ही पहचानकर्ता मान के साथ एक अलग ऑब्जेक्ट पहले ही सत्र के साथ जुड़ा हुआ था: 10, इकाई का: Sales.Entities.Ttable1

a different object with the same identifier value was already associated with the   session: 10, of entity: Sales.Entities.TTable 
+1

कृपया सही उत्तर चिह्नित करें! – Joel

उत्तर

17

आपके आवेदन एक वेब अनुप्रयोग है के लिए हल नहीं है?

उपयोग Session.Merge(object)

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

इन मामलों में मर्ज() विधि का उपयोग किया जाता है, ताकि आप अपने वेब एप्लिकेशन में ऑब्जेक्ट्स अपडेट कर सकें।

4

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

सत्र का उपयोग करना। मर्ज एक संभावना है लेकिन ज्यादातर मामलों में यदि आप वेब संदर्भ में हैं तो आपके पास पहले से ही संदर्भ होना चाहिए क्योंकि आप संभवतः सत्र प्रति अनुरोध का उपयोग करते हैं। तो सवाल यह है:

  • आपके पास ऑब्जेक्ट क्यों है जिसे आप कैश में सहेजने की कोशिश कर रहे हैं लेकिन इसका उपयोग नहीं कर रहे हैं?
-6

सत्र से पहले सत्र (क्लीयर() का उपयोग करें। अद्यतन (ऑब्जेक्ट)।

+7

विधि साफ़ कार्य की इकाई को साफ़ कर रहा है (यदि कोई परिवर्तन नहीं हुआ है, तो उन्हें त्याग दिया जाएगा) और यह व्यवहार कर रहा है जैसे कि आपने सत्र में लोड किए गए सभी उदाहरणों पर 'Evict' कहा था। आप लक्षण को हटाकर समस्या को छुपा रहे हैं। कौन सा बुरा है! –

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

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