6

मैं एक Store कि Products की एक सूची है है:मैं एक क्षणिक ऑब्जेक्ट को कैसे सहेज सकता हूं जो पहले से ही NHibernate सत्र में मौजूद है?

var store = new Store(); 
store.Products.Add(new Product{ Id = 1, Name = "Apples" }; 
store.Products.Add(new Product{ Id = 2, Name = "Oranges" }; 

Database.Save(store); 

अब, मैं Products में से एक संपादित करना चाहते हैं, लेकिन एक क्षणिक संस्था के साथ। इस उदाहरण के लिए होगा,, एक वेब ब्राउज़र से डेटा:

// this is what I get from the web browser, this product should 
// edit the one that's already in the database that has the same Id 
var product = new Product{ Id = 2, Name = "Mandarin Oranges" }; 

store.Products.Add(product); 
Database.Save(store); 

हालांकि, यह करने के लिए इस तरह से मुझे एक त्रुटि देता है की कोशिश कर रहा:

a different object with the same identifier value was already associated with the session

कारण क्योंकि store.Products संग्रह पहले से ही शामिल है एक एक ही आईडी के साथ इकाई। मैं इस समस्या के आसपास कैसे हो सकता हूं?

+0

आप दूसरी बार सहेजने से पहले session.Evict (उत्पाद) की कोशिश की? – mxmissile

उत्तर

8
इसके बजाय क्षणिक उदाहरण मर्ज करने का प्रयास की

। वास्तविक उदाहरण के साथ क्यों शुरू नहीं करें ... बस आईडी द्वारा उत्पाद प्राप्त करें, फ़ील्ड अपडेट करें और प्रतिबद्ध करें।

var product = session.Get<Product>(2); 
product.Name = "Mandarin Oranges"; 
tx.Commit(); 

या मर्ज रास्ता ...

var product = new Product{ Id = 2, Name = "Mandarin Oranges" }; 
var mergedProduct = (Product) session.Merge(product); 
tx.Commit(); 
-1

शायद आपको डेटाबेस को कॉल करना चाहिए। SaveOrUpdate (store); शुद्ध बचत (स्टोर) के बजाय?

+0

हूप्स, उल्लेख करने के लिए भूल गए कि 'डेटाबेस। सेव() 'दृश्यों के पीछे' NHibernate.ISession.SaveOrUpdate() 'करता है। –

+0

SaveOrUpdate इस स्थिति में मदद नहीं करेगा, त्रुटि तब होती है क्योंकि सत्र में पहले से ही कोई ऑब्जेक्ट है। – jfneis

3

मैं इस मामले में अधिक संदर्भ के बिना 100% सकारात्मक नहीं हूं, लेकिन एक सत्र विलय काम कर सकता है।

http://ayende.com/Blog/archive/2009/11/08/nhibernate-ndash-cross-session-operations.aspx

+0

लिंक के लिए धन्यवाद, यह समस्या क्यों होती है इसकी अच्छी व्याख्या। –

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

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