2009-07-15 20 views
20

मैं ऑब्जेक्ट कॉन्टेक्स्ट में एक इकाई संलग्न करने का प्रयास कर रहा हूं। जब मैं ऐसा करते हैं, निम्नलिखित InvalidOperationException फेंक दिया जाता है:एक पृथक इकाई संलग्न करने में असमर्थ: "ऑब्जेक्टस्टेट प्रबंधक में एक ही कुंजी वाला एक ऑब्जेक्ट पहले से मौजूद है"

An object with the same key already exists in the ObjectStateManager. 
The ObjectStateManager cannot track multiple objects with the same key. 

मैं वस्तु राज्य प्रबंधक में जाँच की और आइटम मौजूद नहीं है:

//Data context is actually the object context. 
ObjectStateEntry contact; 
while (//Should only work once since it should be true if the item was attached 
      !DataContext.ObjectStateManager. 
      TryGetObjectStateEntry(Contact, out contact) 
    ) 
     DataContext.Attach(Contact); //Here is the exception thrown. 

या इस सार उदाहरण को देखो और मुझे बताओ अगर यह समझ में आता है:

EntityState state = Contact.EntityState; //Detached 

DataContext.Attach(Contact); //Throws the exception. 
DataContext.AttachTo("Entities.Contacts", Contact); //Throws the Exception 

var detached = DataContext.ObjectStateManager. 
        GetObjectStateEntries(EntityState.Detached); 
//InvalidArgumentException - detached entities cannot be in the obj state mgr 

वीबी में उत्तर भी स्वागत है।

उत्तर

7

क्या आपकी संपर्क इकाई में EntityKey के साथ दो बच्चे इकाइयां हो सकती हैं? उदाहरण के लिए, क्या संपर्क इकाई से एक ही कुंजी के साथ दो पता इकाइयों में जाना संभव है?

यदि आप MergeOptions.NoTracking निर्दिष्ट करते हैं तो एक संदर्भ खुशी से एक पृथक ऑब्जेक्ट ग्राफ़ लौटाएगा जिसमें एक ही कुंजी वाली इकाइयां होंगी। हालांकि, जब आप एक ही ऑब्जेक्ट ग्राफ़ को संलग्न करते हैं तो System.InvalidOperationException फेंक दिया जाएगा।

मैं सुझाव दूंगा कि आप उस संपूर्ण ऑब्जेक्ट ग्राफ़ को देखें जो आप संदर्भ से जोड़ रहे हैं और जांचें कि इसमें डुप्लिकेट कुंजी वाले ऑब्जेक्ट हैं या नहीं।

+0

मुझे इसी तरह की समस्या का सामना करना पड़ रहा है, क्या आप उदाहरण प्रदान कर सकते हैं कि आप उस ऑब्जेक्ट ग्राफ़ पर कैसे देखेंगे जो आप संदर्भ से जोड़ रहे हैं और जांचें कि इसमें डुप्लिकेट कुंजी वाले ऑब्जेक्ट हैं या नहीं? – Eduard

4

मुझे अपने आवेदन के भीतर एक ही समस्या का अनुभव हुआ था।

मैं ObjectStateManager TryGetObjectStateEntry Method

का उपयोग कर इस तथ्य EntityState संपत्ति डेवलपर्स भ्रामक है में से समस्या हल कर दिया है। हालांकि यह अलग-अलग, दिलचस्प है जो त्रुटि उत्पन्न कर रहा है प्रदर्शित कर रहा है।

5

जवाब है (और मैं यह है कि इस समस्या थी उल्लेख किया नहीं के बाद से मैं यह है नहीं पता था), कि यदि आप एक नज़र रखी संस्था के लिए एक नेविगेशन गुण सेट नई इकाई स्वचालित रूप से जोड़ा जाता है:

Dim s = context.States.FirstOrDefault() 
Dim a As New Address 
a.State = s 

Dim state = a.EntityState '= Added 

चूंकि मुझे नहीं पता था कि मैंने यह सोचकर रखा कि इकाई कैसे ट्रैक की जाती है। मैं पूरे quesion को हटा दूंगा लेकिन चूंकि अन्य उत्तर का प्रयास है जो मददगार हो सकता है, मैं इसे यहां छोड़ दूंगा, अगर आपको लगता है कि इसे बंद किया जाना चाहिए तो बंद करने के लिए वोट दें।

+0

संबंधित: http://stackoverflow.com/questions/8759699/entity-framework-creating- new-entity-with-relationship-to-existing-entity-resul – Andre

0

जांचें कि क्या आप इकाई वस्तु की EntityKey संपत्ति सेट कर रहे हैं या नहीं। यदि आप इसे सेट कर रहे हैं, तो सुनिश्चित करें कि आप किसी मौजूदा इकाई ऑब्जेक्ट से कॉपी नहीं कर रहे हैं।

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

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