मैं हाल ही में एक एमवीवीएम डब्ल्यूपीएफ एप्लिकेशन में बहुत अधिक इकाई फ्रेमवर्क का उपयोग कर रहा हूं और मैं कुछ मुद्दों में भाग गया। डेटा प्रदर्शित करने के लिए, मेरे व्यू-मॉडल एक अल्पकालिक ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग कर रहे हैं। इन दृश्य-मॉडल का उपयोग लंबे समय तक चलने वाली प्रक्रिया में किया जाएगा, इसलिए मैंने प्रदर्शन को खराब करने के लिए शॉर्ट-लाइब ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग करना पसंद किया।एंटिटी फ्रेमवर्क किसी इकाई को रीकनेक्ट करते समय संग्रह परिवर्तनों को ट्रैक नहीं करता है
तो मूल रूप से इसका मतलब है कि मेरी इकाइयां डिस्कनेक्ट मोड में खपत की जाती हैं। इन इकाइयों को बनाया, देखा, अद्यतन और हटाया जा सकता है। डिस्कनेक्ट मोड का उपयोग कर डेटाबेस में परिवर्तनों को वापस सहेजने में मुझे कोई समस्या नहीं थी। लेकिन मुझे एक विशेष मामला मिला जहां SaveChanges()
विधि के कॉल पर कोई त्रुटि दिखाई देने के साथ परिवर्तन सहेजे नहीं गए हैं। ऐसा तब होता है जब मैं एक ऐसी इकाई को अद्यतन करने का प्रयास करता हूं जिसमें संग्रह संपत्ति हो। इकाई की स्केलर संपत्ति बिना किसी समस्या के बने रहती है लेकिन संग्रह पर परिवर्तन डेटाबेस पर प्रतिबिंबित नहीं होते हैं, जैसे कि अगर यह पुन: कनेक्शन पर इन परिवर्तनों को ट्रैक करने में सक्षम नहीं था।
यहां मेरे मामले का एक नमूना कोड है जहां मैं इकाई का नाम बदलता हूं और फिर ऑब्जेक्ट को अपने रिपोर्ट संग्रह में जोड़ता हूं। SaveChanges()
के बाद, केवल ग्राहक नाम डेटाबेस पर प्रतिबिंबित किया गया है।
this.Client.Name = "Test Client";
this.Client.Reports.Add(new Report { Name = "Test Report" });
using (ReportCompositionEntities entities = new ReportCompositionEntities(this.connectionStringName))
{
entities.Clients.ApplyCurrentValues(this.Client);
entities.SaveChanges();
}
तो क्या मैं कुछ गलत कर रहा हूं या ईएफ किसी इकाई को दोबारा जोड़ने पर इस प्रकार के परिवर्तनों को ट्रैक करने में सक्षम नहीं है?
वास्तव में दिलचस्प मामला। अब तथ्य यह है कि ईएफ अद्यतन नहीं करता है इन परिवर्तनों को समझ में आता है क्योंकि नेविगेशन संपत्ति की इकाई को किसी अन्य इकाई द्वारा भी संदर्भित किया जा सकता है। कोई समस्या नहीं जब कोई नई इकाई बनाई जाती है लेकिन समेकन के मुद्दों को हटाने के साथ हो सकता है। मेरे आर्किटेक्चर में, प्रत्येक एमवीवीएम सीआरयूडी प्रतिमान की एक प्रतिस्थापन के रूप में। मैंने अपने वीएम को जुड़े मोड में ले जाया (डिस्पोजेक्शन प्रक्रिया को मेरे आर्किटेक्चर द्वारा बॉक्स से बाहर रखा गया है) और मेमोरी प्रोफाइलिंग ने अभी तक कोई समस्या नहीं जाहिर की है। समय बताएगा और डिस्कनेक्ट मोड पर वापस जाना वास्तव में काफी आसान है। आपकी सहायता के लिए धन्यवाद. – Ucodia