हर बार जब मैंने यह त्रुटि देखी है, तो इसका मतलब है कि डेटाबेस में कुछ रिकॉर्ड/ऑब्जेक्ट/जो भी और जब मैं इसे सहेजने की कोशिश कर रहा था, के बीच कुछ बदल गया। असफल होने के कारण, ऐसा इसलिए था क्योंकि काम की मेरी इकाई बहुत बड़ी थी।
मुझे आपके आवेदन की सटीक प्रकृति नहीं पता है, लेकिन मुझे लगता है कि आप एक डेटा संदर्भ बना रहे हैं, रिकॉर्ड रिकॉर्ड कर रहे हैं या रिकॉर्ड की सूची लोड कर रहे हैं, कुछ संचालन कर रहे हैं, कुछ समय और प्रोसेसर चक्र चबाने, और फिर अंत में संशोधित डेटा को डेटाबेस में सहेजने की कोशिश कर रहा है। हो सकता है कि रिकॉर्ड/ऑब्जेक्ट का एक उदाहरण भी लोड हो और इसे थोड़ी देर के लिए क्लास वैरिएबल में संग्रहीत किया जा सके, और उसके बाद पेज लोड या थ्रेड के अंत में या जो कुछ भी बदलेगा उसे वापस सहेजने की कोशिश कर रहा हो। समस्या यह है कि क्योंकि LINQ ने उस की एक प्रति संग्रहित की है, वह प्रतिलिपि है जिसे वह अपडेट करना चाहता है। यदि अंतर्निहित डेटा इस दौरान बदल जाता है, तो यह पागल हो जाता है।
अपने आप से यह पूछें, क्या होगा यदि आप अपने ऑब्जेक्ट्स के पूरे जीवनकाल के लिए अपने डेटा पर लॉकिंग लेनदेन डालते हैं। जो कुछ भी आप लोड करते हैं उसे संशोधित करें, उस समय के दौरान किसी और को इसे छूने की अनुमति नहीं दी जाएगी। असल में यह धारणा है। अनुमोदित, LINQ इसके बारे में थोड़ा अधिक आशावादी है, यदि आप कभी भी डेटा अपडेट नहीं कर रहे हैं, तो पंक्ति या तालिका को लॉक करने में कोई समझ नहीं है, लेकिन आप उन समस्याओं के माध्यम से सोचते हैं। अपने आप से पूछें कि क्या आप अपनी वस्तुओं पर सख्त लेनदेन वाले ताले लगाएंगे, और शायद आपको अपमानजनक कोड पर इंगित करेंगे।
मेरा समाधान यह है कि मेरी इकाई की कार्य को जितना संभव हो सके छोटा रखें। ऑब्जेक्ट को लोड न करें और अपनी कार्यशील प्रतिलिपि के रूप में इसका उपयोग करें और इसे एक डेटाबेस में वापस डेटाबेस में संग्रहीत करें। इसके बजाए, ऑब्जेक्ट लोड करें और एक चरण में आपको जो जानकारी चाहिए उसे खींचें, फिर उन परिवर्तनों को समझें जिन्हें आपको लागू करने की आवश्यकता है, और फिर ऑब्जेक्ट लोड/अपडेट/सेव करें। निश्चित रूप से यह डेटाबेस के लिए और अधिक दौर यात्रा का कारण बनता है, लेकिन आपको एक बेहतर आश्वासन देता है कि आप डेटा की नवीनतम प्रतिलिपि के साथ काम कर रहे हैं। यह अभी भी "आखिरी में जीत जाएगा", जिसका अर्थ यह है कि अगर डेटा के साथ काम करते समय कोई अपडेट करता है तो यह खो सकता है, लेकिन जब तक आप लेनदेन के साथ रिकॉर्ड लॉक नहीं करते तब तक यह हमेशा जोखिम होता है। हालांकि, यह आपको flexiblity खरीदता है कि अगर कोई और एक ही पंक्ति में असंबंधित क्षेत्रों को संशोधित कर रहा है, तो आप दोनों एक साथ उस डेटा पर काम कर सकते हैं।
स्रोत
2012-01-13 14:24:42
मैं जाँच चाहते हैं कि डेटा प्रकार और बातिल की कमी dbml और अपने डेटाबेस के बीच ठीक प्रकार से दिखाई। – codingbadger
@ बैरी हाँ वे सब करते हैं, मैंने प्रत्येक तालिका को फिर से जोड़ा है –