मैं इस त्रुटि मिलती है अगर मैं इन चरणों का पालन: एक वस्तु (एक संबद्ध इकाई संपत्ति) कीसदस्य 'एक्स' संघ के सदस्य के साथ असंगत हो में बदल गया था 'वाई
- संपत्ति बदलें Y
- परिवर्तन सबमिट करने का प्रयास
- इस बिंदु पर वाई का मान और एक्स (अंतर्निहित कुंजी) का मान अनुबंध में नहीं है - LINQ से SQL स्पष्ट रूप से इन्हें सिंक्रनाइज़ नहीं करता है जब तक GetChangeSet को कॉल नहीं किया जाता है।
- अद्यतन ऑपरेशन के दौरान कुछ व्यावसायिक तर्क या डेटाबेस स्तर की बाधा के कारण एक अपेक्षित त्रुटि उत्पन्न होती है।
- इस बिंदु पर वाई का मान X के साथ अनुबंध में है क्योंकि GetChangeSet को बुलाया गया था।
- वाई से कुछ भी नहीं (उर्फ नल) का मूल्य बदलें।
- GetChangeSet पर कॉल करें।
त्रुटि अंतिम चरण पर होती है क्योंकि एक्स का मान और एक्स का मूल मान (GetOriginalEntityState द्वारा लौटाया गया) अलग है, और नया मान वाई से सहमत नहीं है? क्या यही कारण है? क्या यह LINQ से SQL में एक बग है। ऐसा होना चाहिए क्योंकि अगर मैं चरण 5 के दौरान वाई को दूसरे (गैर-शून्य) मान में बदलता हूं तो मुझे वही व्यवहार दिखाई नहीं देता है। इसके आसपास क्या सही तरीका है? मैं कुछ तरीकों से देख सकता हूं:
- त्रुटि होने पर डेटा कॉन्टेक्स्ट को छोड़ दें और यूआई को छोड़ दें। मुझे यह पसंद नहीं है क्योंकि तब आशावादी कोकुरेंसी परिवर्तन विवादों का पता नहीं लगाया जा सकता है। नए संदर्भ में मूल मान नहीं हैं जो यूआई की आबादी के साथ ही पॉप्युलेट किए गए थे, इसलिए यदि यूआई में इसमें कोई पुराना मूल्य है, तो वे डेटाबेस में डेटा को वापस करने का कारण बनेंगे।
- डेटाकॉन्टेक्स्ट (ओवरराइट कंटेंट) को रीफ्रेश करें और यूआई को जैसा छोड़ दें। मुझे # 1 के समान कारण के लिए यह पसंद नहीं है।
- डेटाकॉन्टेक्स्ट (ओवरराइट कंटेंट) को रीफ्रेश करें और यूआई को फिर से पॉप्युलेट करें। मुझे यह पसंद नहीं है क्योंकि तब उपयोगकर्ता को दिए गए त्रुटि संदेश उपयोगकर्ता को उनके द्वारा किए गए त्रुटि को नहीं दिखाता है और उन्हें इसे सही करने की अनुमति देता है। यह उपयोगकर्ता द्वारा किए गए सभी अन्य परिवर्तनों को भी त्याग देता है।
- जब त्रुटि होती है, तो वाई के मूल मान को स्पष्ट रूप से पुनर्प्राप्त करें और वाई को रीसेट करें, फिर X को पुनः सिंक्रनाइज़ करने के लिए GetChangeSet को कॉल करें (एक्स केवल पढ़ने या निजी है इसलिए मैं इसे सीधे रीसेट नहीं कर सकता)। ऐसा लगता है, लेकिन एक हैक की तरह लगता है, और अन्य समान त्रुटियों के लिए बहुत सारे कोड की आवश्यकता हो सकती है।
क्या कोई बेहतर समाधान है। क्या यह कुछ है जो रिपोर्ट किया जाना चाहिए?
क्या आप स्पष्ट कर सकते हैं कि आपका क्या मतलब है "2. इस बिंदु पर वाई का मूल्य और एक्स (अंतर्निहित कुंजी) का मान अनुबंध में नहीं है।" निश्चित रूप से आप इकाई की प्राथमिक कुंजी संपत्ति नहीं बदल रहे हैं, लेकिन कुछ अन्य फ़ील्ड, है ना? –
दाएं। मान लें कि मेरे पास ऑर्डर ऑब्जेक्ट है, और गुणों में से एक को ग्राहक कहा जाता है जो दर्शाता है कि किस ग्राहक ने ऑर्डर दिया था। यह वाई का प्रतिनिधित्व करता है। उस लिंक को छिपी हुई संपत्ति जैसे _CustomerId द्वारा कवर के तहत दर्शाया गया है। यह एक्स का प्रतिनिधित्व करता है। मैं आदेश से जुड़े ग्राहक को बदल सकता हूं। ग्राहक नए ग्राहक ऑब्जेक्ट का संदर्भ लेंगे, लेकिन _CustomerId GetChangeSet कहलाए जाने तक ग्राहक आंतरिक _Id मान को प्रतिबिंबित नहीं करेगा। – BlueMonkMN