दिलचस्प पोस्ट
जावास्क्रिप्ट, नोड। जेएस: है Array.for हर एसिंक्रोनस? क्या मैं CouchDB में लेनदेन और ताले कर सकता हूं? Jquery का उपयोग करके आप एक पृष्ठभूमि रंग में / बाहर कैसे फीका कर सकते हैं? एक टेबल से सभी रिकॉर्ड कैसे चुनते हैं जो किसी अन्य तालिका में मौजूद नहीं हैं? स्मृति में कहां मेरे चर सी में संग्रहीत हैं? एंड्रॉइड: टेक्स्टव्यू हाइपरलिंक क्या C ++ 03 को लक्ष्य करते समय एक बारंबार बफर के रूप में std :: basic_string <t> का प्रयोग करना उचित है? क्या मैं सी ++ में एक स्वायत्त 'स्वयं' सदस्य प्रकार को लागू कर सकता हूं? ऑब्जेक्ट के var_dump में ऑब्जेक्ट (कुछ क्लास) के बगल में # <some-number> क्या है? मेरे पास अनुमान है क्या मैं सही हू? "थ्रेड 1: ब्रेकपॉइंट पर रोक दिया" त्रुटि जब एक NSURL ऑब्जेक्ट को प्रारंभ किया गया था SASS का उपयोग करते समय मैं एक अलग निर्देशिका से एक फ़ाइल कैसे आयात कर सकता हूं? पायथन में "कुछ नहीं" पर stdout पुनर्निर्देशित करना प्रतिबिंब के द्वारा मैं एक प्रकार के सभी स्थिरांक कैसे प्राप्त करूं? सी: कैसे एक EOF अनुकरण करने के लिए? SQL सर्वर रिकर्सिव क्वेरी

क्या यह जांचना संभव है कि क्या कोई वस्तु पहले से इकाई मापदंड में डेटा संदर्भ से जुड़ी हुई है?

किसी वस्तु को संलग्न करने का प्रयास करते समय मुझे निम्न त्रुटि मिल रही है, जो संदर्भ से पहले से संदर्भित किया गया है। context.AttachTo(...) :

ऑब्जेक्टस्टेट मैनेजर में एक ही कुंजी के साथ एक वस्तु पहले से मौजूद है। ऑब्जेक्टस्टेट प्रबंधक एक ही कुंजी के साथ कई ऑब्जेक्ट ट्रैक नहीं कर सकता है।

क्या इस प्रकार से कुछ हासिल करने का एक तरीका है:

context.IsAttachedTo(...)

चीयर्स!

संपादित करें:

विस्तारित जेसन जेसन विस्तार करीब है, लेकिन यह मेरी स्थिति के लिए काम नहीं करता है

मैं किसी अन्य प्रश्न के जवाब में उल्लिखित विधि का उपयोग करके कुछ काम करने की कोशिश कर रहा हूं:

मैं पंक्तियों को पुनः प्राप्त करने के बिना * लिनक टू एंटिटीज़ * का उपयोग करते हुए मेरी तालिका से एक या अधिक पंक्तियों को कैसे हटाऊं?

मेरा कोड कुछ इस तरह दिखता है:

 var user = new User() { Id = 1 }; context.AttachTo("Users", user); comment.User = user; context.SaveChanges(); 

यह ठीक काम करता है, इसके अलावा जब मैं उस उपयोगकर्ता के लिए कुछ और करता हूं जहां मैं उसी विधि का उपयोग करता हूं और डमी User ऑब्जेक्ट संलग्न करने का प्रयास करता हूं। यह विफल हो जाता है क्योंकि मैंने पहले कि डमी उपयोगकर्ता ऑब्जेक्ट संलग्न किया है। मैं इसके लिए कैसे जांच सकता हूं?

वेब के समाधान से एकत्रित समाधान "क्या यह जांचना संभव है कि क्या कोई वस्तु पहले से इकाई मापदंड में डेटा संदर्भ से जुड़ी हुई है?"

यहां जो कुछ मैंने समाप्त किया है, जो बहुत अच्छी तरह से काम करता है:

 public static void AttachToOrGet<T>(this ObjectContext context, string entitySetName, ref T entity) where T : IEntityWithKey { ObjectStateEntry entry; // Track whether we need to perform an attach bool attach = false; if ( context.ObjectStateManager.TryGetObjectStateEntry ( context.CreateEntityKey(entitySetName, entity), out entry ) ) { // Re-attach if necessary attach = entry.State == EntityState.Detached; // Get the discovered entity to the ref entity = (T)entry.Entity; } else { // Attach for the first time attach = true; } if (attach) context.AttachTo(entitySetName, entity); } 

आप इसे निम्नानुसार कॉल कर सकते हैं:

 User user = new User() { Id = 1 }; II.AttachToOrGet<Users>("Users", ref user); 

यह बहुत अच्छी तरह से काम करता है क्योंकि यह context.AttachTo(...) जैसा ही है। context.AttachTo(...) को छोड़कर आप हर बार ऊपर दिए गए आईडी चाल का उपयोग कर सकते हैं। आप या तो ऑब्जेक्ट के साथ समाप्त हो चुके हैं या आपकी ऑब्जेक्ट संलग्न हैं संदर्भ पर CreateEntityKey कॉलिंग सुनिश्चित करता है कि यह अच्छा और सामान्य है और आगे की कोडिंग के साथ समग्र कुंजी के साथ भी काम करेगा (क्योंकि ईएफ पहले से ही हमारे लिए ऐसा कर सकता है!)।

एक सरल दृष्टिकोण है:

  bool isDetached = context.Entry(user).State == EntityState.Detached; if (isDetached) context.Users.Attach(user); 

इस एक्सटेंशन विधि का प्रयास करें (यह अनचाहे और बंद-कफ है):

 public static bool IsAttachedTo(this ObjectContext context, object entity) { if(entity == null) { throw new ArgumentNullException("entity"); } ObjectStateEntry entry; if(context.ObjectStateManager.TryGetObjectStateEntry(entity, out entry)) { return (entry.State != EntityState.Detached); } return false; } 

आपके द्वारा आपके संपादन में बताई गई स्थिति को देखते हुए, आपको निम्न अधिभार का उपयोग करने की आवश्यकता हो सकती है जो ऑब्जेक्ट के बजाय एक EntityKey स्वीकार करता है:

 public static bool IsAttachedTo(this ObjectContext, EntityKey key) { if(key == null) { throw new ArgumentNullException("key"); } ObjectStateEntry entry; if(context.ObjectStateManager.TryGetObjectStateEntry(key, out entry)) { return (entry.State != EntityState.Detached); } return false; } 

अपनी स्थिति में एक EntityKey बनाने के लिए, एक दिशानिर्देश के रूप में निम्नलिखित का उपयोग करें:

 EntityKey key = new EntityKey("MyEntities.User", "Id", 1); 

आप प्रॉपर्टी User.EntityKey (इंटरफ़ेस IEntityWithKey ) का उपयोग कर User एक मौजूदा उदाहरण से EntityKey प्राप्त कर सकते हैं।

उस ऑब्जेक्ट की इकाई की का उपयोग करना जिसे आप जांचने का प्रयास कर रहे हैं:

 var entry = context.ObjectStateManager.GetObjectStateEntry("EntityKey"); if (entry.State == EntityState.Detached) { // Do Something } 

दयालुता,

सज्जन

यह ओपी सवाल का सीधे जवाब नहीं देता है लेकिन इस तरह से मैंने मेरा हल निकाला।

यह उन लोगों के लिए है जो DbContext बजाय DbContext का उपयोग कर रहे हैं

  public TEntity Retrieve(object primaryKey) { return DbSet.Find(primaryKey); } 

DbSet.Find विधि :

दिए गए प्राथमिक कुंजी मानों के साथ एक इकाई ढूँढता है यदि दिए गए प्राथमिक कुंजी मानों के साथ एक इकाई संदर्भ में मौजूद है, तो यह स्टोर के लिए अनुरोध किए बिना तुरंत लौटा दी जाती है। अन्यथा, एक इकाई के लिए दिए गए प्राथमिक कुंजी मानों के साथ स्टोर में एक अनुरोध किया जाता है और यह इकाई, यदि मिलेगी, संदर्भ से जुड़ी हुई है और वापस लौटा दी गई है यदि कोई संस्था संदर्भ या स्टोर में नहीं मिलती है, तो शून्य लौटा है

मूल रूप से, यह दिए गए primaryKey की संलग्न ऑब्जेक्ट को देता है तो आपको सही आवृत्ति को रखने के लिए लौटे हुए ऑब्जेक्ट में परिवर्तन लागू करने की आवश्यकता है।