बिना किसी मुद्दे के हमारे अनुप्रयोगों में एंटीटी फ्रेमवर्क का उपयोग करने के कुछ सालों बाद, हमारी कंपनी ने हमारे उपयोगकर्ताओं को लैपटॉप तैनात करना शुरू कर दिया है। हमारे नेटवर्क पर सीधे, वायर्ड कनेक्शन के साथ, लैपटॉप का उपयोग साइट पर किया जा रहा है।संदर्भ के निपटारे के बिना मैं एक इकाई फ्रेमवर्क कनेक्शन को रीफ्रेश कैसे कर सकता हूं
तब से, हम अपने कार्यक्रमों के भीतर दुर्घटनाओं की एक बड़ी वृद्धि देखी है, अपवाद लॉग
दिखा साथSystem.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server.
(provider: Session Provider, error: 19 - Physical connection is not usable)
मेरे सिद्धांत यह है कि इस मुद्दे को तथ्य यह है कि लैपटॉप, पीसी के विपरीत, जाना की वजह से उपजी है सोने के लिए। मुझे लगता है कि जब लैपटॉप सो जाता है तो नेटवर्क एडाप्टर अक्षम किया जा रहा है, और बैक अप उठाने पर फिर से सक्षम किया जाता है। मुझे लगता है कि हमारे कार्यक्रम अभी भी एक कनेक्शन का उपयोग कर सर्वर के साथ संवाद करने की कोशिश कर रहे हैं जो अब नहीं है।
Microsoft.Win32.SystemEvents.PowerModeChanged
मैं पता लगा सकते हैं जब यह उठता है और कनेक्शन को ताज़ा:
तो, मेरा विचार पर प्रतिक्रिया के लिए किया गया था। मुसीबत यह है कि ऐसा करने का एकमात्र तरीका यह है कि वर्तमान डीबीकॉन्टेक्स्ट का निपटान करना और एक नया चालू करना है।
इससे समस्या यह है कि किसी भी असामान्य परिवर्तन को खो दिया जाता है। यदि उपयोगकर्ता रिकॉर्ड अपडेट करने पर पूरे दिन काम कर रहा है, तो वे अपना काम खो देंगे। इतना ही नहीं, लेकिन हमें अपने सभी एप्लिकेशन, और हमारे सभी व्यू मॉडलों से गुज़रना होगा और उपयोगकर्ता को नोटिफिकेशन के साथ संपादन मोड से कुछ प्रकार का किक शामिल करना होगा। बिल्कुल सुंदर नहीं है।
एक दूसरा विचार जो मैंने किया था वह एक डीबीकॉन्टेक्स्ट क्लोन करने के लिए एक विधि बनाना था। जब कंप्यूटर उठता है, तो मैं एक नया डीबीकॉन्टेक्स्ट बना सकता हूं और इसे निपटाने से पहले राज्य को पुराने से कॉपी कर सकता हूं ... लेकिन हमारे कुछ डेटा मॉडल बड़े पैमाने पर हैं, और प्रत्येक के लिए एक गहरी क्लोन विधि बनाना काफी उपक्रम होगा।
यह मेरे लिए होता है कि यह अभी भी हमें जिस तरह से जाना है ... लेकिन मैं यह जांचने के लिए मूर्ख नहीं हूं कि कोई भी इकाई फ्रेमवर्क डीबीकॉन्टेक्स्ट के कनेक्शन को रीफ्रेश करने के तरीके को जानता है, इसके बिना इसे खोए राज्य।
मैं किसी भी सलाह के बारे में किसी भी सलाह की सराहना करता हूं।
सुनिश्चित नहीं है कि आपके पास किस प्रकार का डिज़ाइन है लेकिन स्मृति में बड़ी सहेजी गई जानकारी रखना एक अच्छा विचार नहीं है। आपको किसी भी समय समय-समय पर जानकारी को स्वतः सेव करना चाहिए। कम से कम उस हानि की जानकारी के साथ यदि कोई भी यथासंभव कम से कम किया जाएगा। कई एप्लिकेशन (वेब ऐप्स सहित) इस रणनीति का उपयोग करते हैं। –
यह एक उचित बिंदु है। हम ऑटो-सेव क्यों नहीं करते हैं क्योंकि हम उपयोगकर्ताओं को यह तय करने की अनुमति देते हैं कि परिवर्तनों को सहेजना या रद्द करना है या नहीं। ऐसा करने के लिए, दो रणनीतियों हैं: 1) संपादन शुरू होने पर स्मृति में मूल डेटा की एक प्रति बनाएं, डाटाबेस में लाइव अपडेट बनाए रखें क्योंकि डेटा बदल गया है, पुरानी प्रतिलिपि के साथ डेटा अपडेट करना रद्द करें। 2) एक कार्यशील प्रतिलिपि को स्मृति में रखें, और जब उपयोगकर्ता अपने परिवर्तनों को सहेजने का विकल्प चुनता है तो केवल डेटाबेस पर बने रहें। कार्यान्वयन परिप्रेक्ष्य से, दूसरा विकल्प सरल है, और वह तरीका है जिसका हम उपयोग करते हैं। उस ने कहा, यह ऊपर देखे गए मुद्दों की तरह मुद्दों का कारण बनता है। – Chronicide
क्या कोई घटना उपलब्ध नहीं है जो लैपटॉप सोने से पहले होती है? आप पहले से बचा सकते हैं, कनेक्शन बंद कर सकते हैं और जब यह जागता है तो इसे फिर से खोलें। – Matt