मैं एक मुद्दा एक विदेशी कुंजी क्षेत्र अपडेट करने का प्रयास में भाग:मैं LINQ से SQL/SQLMetal में कुशलतापूर्वक एक विदेशी कुंजी कैसे अपडेट करूं?
record.ForeignId = newId;
यह साथ बम SQLMetal कोड कि System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException()
फेंकता की वजह से "ऑपरेशन नहीं वैध वस्तु की वर्तमान स्थिति की वजह से है।"
LinqToSQL Error : Operation is not valid due to the current state of the object और http://social.msdn.microsoft.com/forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25/, इस पर चर्चा दूसरों के बीच:
मैं पहली बार इस मुद्दे को हिट करने के लिए नहीं था।
उनके समाधान यह है:
record.Foreign = Database.Foreigns.Single(c => c.Id == newId);
के पाठ्यक्रम विदेशी पर एक डीबी देखने का कारण बनता है सिर्फ एक वस्तु वापस ईद मैं पहले से ही पता है कि प्राप्त करने के लिए, यही कारण है कि! तो, मैं बिना किसी व्यर्थ क्वेरी के इस अद्यतन को कैसे पूरा करूं (या प्रश्न अगर मेरे पास इनमें से बहुत सारे एफके हैं)?
मुझे अटैच() के बारे में पता नहीं था, लेकिन मैंने कोशिश की और एक डुप्लिकेट कुंजी त्रुटि मिली: "एक कुंजी के साथ एक इकाई नहीं जोड़ सकता जो पहले से उपयोग में है।" क्या यह डीबी से यह पता लगाने के लिए पूछताछ करता था, या वह रिकॉर्ड शायद मेरे डेटा संदर्भ में लटक रहा था ...? –
डेटाकॉन्टेक्स्ट उन सभी रिकॉर्ड ट्रैक करता है जिन्हें उन्होंने लोड किया है (प्राथमिक कुंजी द्वारा)। अगर उसने आईडी = 5 के साथ एक अभिभावक लोड किया है, तो आप आईडी = 5 के साथ माता-पिता का एक और उदाहरण संलग्न नहीं कर पाएंगे। –
और क्या यह देखने का कोई तरीका है कि कोई कैश किया गया है और अगर यह करता है तो इसे बाहर निकाल दें? और अन्यथा आपके उत्तर में एक नया जीन अप करें? या शायद इसे पहले छोड़ने के लिए कहें? या इस योजना को बनाने के लिए कुछ भी काम करते हैं? –