में है कि पहले से ही साथ एक इकाई जोड़ा नहीं जा सकता इस विशिष्ट कट परिदृश्य पर विचार करें:LINQ संलग्न(): एक महत्वपूर्ण उपयोग
- लोड एसक्यूएल सर्वर से एक ग्राहक वस्तु LINQ का उपयोग कर SQL के
- उपयोगकर्ता इकाई को संपादित करता है, और प्रस्तुतिकरण स्तर संशोधित इकाई को वापस भेजता है।
- डेटा परत, L2S का उपयोग कर, एसक्यूएल सर्वर
में परिवर्तन भेजना होगा SQL क्वेरी जिसका इरादा एक ग्राहक इकाई लेने के लिए है करने के लिए इस LINQ पर विचार करें।
Cust custOrig = db.Custs.SingleOrDefault(o => o.ID == c.ID); //get the original
db.Custs.Attach(c, custOrig); //we don't have a TimeStamp=True property
db.SubmitChanges();
DuplicateKeyException: Cannot add an entity with a key that is already in use.
प्रश्न
- कैसे आप इस अपवाद बच सकते हैं?
- एक ऐसी इकाई को अद्यतन करने के लिए सबसे अच्छी रणनीति क्या है जो टाइमस्टैम्प संपत्ति नहीं है/चाहता/चाहती है?
उप इष्टतम समाधान
- मैन्युअल मूल ग्राहक के लिए अद्यतन ग्राहक की प्रत्येक प्रॉपर्टी की स्थापना की।
- स्पिन को एक और DataContext
+1; धन्यवाद! यह वास्तव में काम किया था! मैं अब इस प्रश्न को 'अनुत्तरित' छोड़ दूंगा, लेकिन यह जवाब निश्चित रूप से समस्या हल करता है! –
जस्टलोरेन कहते हैं कि अटैच एक संदर्भ देने के लिए है जो अभी तक नहीं है - इसका उपयोग किसी को बदलने के लिए नहीं किया जा सकता है। एक सामान्य स्थिति में यदि आप किसी ऑब्जेक्ट को वापस प्राप्त कर रहे हैं तो यह कुछ समय बाद होगा और एक नए डेटा संदर्भ से जुड़ा होगा। – DamienG