NHibernate error (Cannot insert duplicate key with unique index) -


मेरा क्लास क्लाइंट:

  सार्वजनिक वर्ग क्लाइंट: इकाई {सार्वजनिक ग्राहक} {ListClientObjectX = नई सूची & lt; ClientObjectX & gt; (); } सार्वजनिक वर्चुअल आइएलआईटी & lt; क्लाइंट ओब्जेक्सएक्स & gt; ListClientObjectX {प्राप्त करें; सेट; } ...}  

मेरे क्लास क्लाइंटऑब्जेक्टएक्स

  सार्वजनिक वर्ग क्लाइंटऑब्जेक्टएक्स: इकाई {सार्वजनिक क्लाइंटऑब्जेक्ट X () {क्लाइंट = नया ग्राहक (); ऑब्जेक्ट = नया ऑब्जेक्ट (); } सार्वजनिक आभासी क्लाइंट क्लाइंट {get; सेट; } सार्वजनिक वर्चुअल ऑब्जेक्ट ऑब्जेक्ट {प्राप्त करें; सेट; } सार्वजनिक वर्चुअल स्ट्रिंग Name {get; मेरा क्लाइंट ऑब्जेक्ट टेबल तालिका में 2 कॉलम (क्लाइंटआईडी और ऑब्जेक्टएक्सआईडी) के साथ एक अनूठा इंडेक्स है: idxClientObjectX   

क्लाइंट मैपिंग (फ्लुेंट):

  पब्लिक क्लास क्लाइंटमैप: क्लासमार्क & lt; क्लाइंट & gt; {सार्वजनिक क्लाइंटमैप () {टेबल ("टीबीएलएक्टलिएन्ट"); आईडी (x = & gt; x.ID, "ClientID")। उत्पन्न हुआ। पहचान ()। बिना सहेजे हुए मूल्य (0); HasMany & lt; ClientObjectX & gt; (x = & gt; x.ListClientObjectX)। उलटा () .Cascade.AllDeleteOrphan () .KeyColumns.Add ("ClientID"); }}  

तो, उदाहरण के लिए, जब मैं एक क्लाइंट लोड करता हूँ, जिसमें ListClientObjectX एक वस्तु है:

  var क्लाइंट = नया रिपॉजिटरी & lt; Client & gt; ( ) .load (2);  

और ListClientObjectX से वस्तु हटाई गई है:

  client.ListClientObjectX.RemoveAt (0);  

कोई भी सहेज नहीं / अभी तक प्रतिबद्ध नहीं है अब मैं एक ही क्लाइंटआईडी और ऑब्जेक्टएक्सआईडी के साथ ListClientObjectX में एक वस्तु जोड़ूंगा:

  client.ListClientObjectX.Add (परीक्षण);  

जब मैं इसे सहेजता हूं, मुझे एक त्रुटि मिलती है:

  repCliente.SaveOrUpdate (क्लाइंट);  

अद्वितीय अनुक्रमणिका 'idxClientObjectX' के साथ वस्तु 'dbo.tblClientObjectX' में डुप्लिकेट कुंजी पंक्ति सम्मिलित नहीं कर सकता इस वक्तव्य को समाप्त कर दिया गया है।

उस त्रुटि को क्यों मिलता है? मैं इसे कैसे ठीक कर सकता हूं?

धन्यवाद

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

  var objectX = client.ListClientObjectX [0]; client.ListClientObjectX.Remove (objectX); ObjectX.Client = नल;  

ऑपरेशन को दो लेन-देन में तोड़ना एक बेहतर विचार हो सकता है; एक को हटाने के लिए और दूसरे को एक ही अनूठे संयोजन के साथ एक वस्तु जोड़ने के लिए मुझे लगता है कि आप अकसर मुसीबत के लिए पूछ रहे हैं यदि आप अक्सर एक ही ऑपरेशन में एक ही अनूठी संयोजन के साथ ऑब्जेक्ट जोड़ते हैं और निकाल देते हैं।


Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -