Linq to Sql - DataContext design issues and considerations in ASP.NET MVC application -
मैं एक एएसपी.NET MVC आवेदन में Linq से Sql का उपयोग करते समय "एकल डेटा संदर्भ प्रति परमाणु आपरेशन" का उपयोग कर रहा हूं। / P>
अब तक, मैं एक सिंगलटन डेटाकॉन्टेक्स्ट का उपयोग कर रहा हूं, जिसे मैंने सीखा है, कई मुद्दों पर हैं, इसलिए मैंने परमाणु संचालन के लिए एकल डेटाकॉन्टेक्स्ट का उपयोग करने के लिए कोड को पुन: लागू किया है।
नियंत्रक क्रिया का एक उदाहरण अब इस प्रकार है (refactoring ने इसे बदल नहीं किया है):
सार्वजनिक कार्यवाही सूची () {सूची & lt; अनुरोध & gt; अनुरोध = this.repository.AllRequests (); वापसी देखें (अनुरोध); }
रिपॉजिटरी प्रकार आईआरपीजीटरी है मैं एक अलग डेटा परत पर स्विच करने में सक्षम होने के लिए इस अमूर्त को रखना चाहता हूं (Linq से Sql के साथ मेरे हाल के अनुभव के आधार पर, यह बहुत जल्द हो सकता है:))
LinqRepository AllRequests () विधि लागू करता है निम्नानुसार:
सार्वजनिक सूची & lt; अनुरोध & gt; AllRequests () {(DataModelDataContext कनेक्शन = GetContext ()) का उपयोग करके {return connection.Requests.ToList (); }}
(केवल संदर्भ के लिए, पहले डेटाकॉन्टेक्स्ट उदाहरण LinqRepository और LinqRepository का एक क्षेत्र था एक एकल स्थिर उदाहरण के रूप में आयोजित किया गया था)
DataContext से निपटारा है
& lt;% = html.Encode (request.Branch.Name)% & gt; विधि रिटर्न। अब ऑब्जेक्ट डिस्प्स अपॉर्डेड गुणों को एक्सेस करते समय व्यू कोड फेंकता है। / / <>
मैं DataContext के निपटान सीखा है की जरूरत नहीं हो सकता है (यहाँ)
जब मैं डेटा काँटेस्टेक्स का निपटान नहीं करता (उपयोग को हटाने), वहाँ नहीं है ObjectDisposedException।
अर्थात्: मैंने विधि को निम्नानुसार बदल दिया है:
सार्वजनिक सूची & lt; अनुरोध & gt; AllRequests () {DataModelDataContext कनेक्शन = GetContext (); रिटर्न कनेक्शन। अनुरोध .ओलिस्ट (); }
लेकिन मैं सोच रहा हूं, इस परिदृश्य में डेटाकॉन्टेक्स्ट इंस्टैलेशन को न निकालने का निहितार्थ क्या है?
मुझे पता है कि मुझे इकाई से सभी डेटा पढ़ना चाहिए डेटा कॉन्टेन्टेक्स्ट का निपटारा करने से पहले उदाहरण (स्थगित गुणों सहित), लेकिन मैं एक और अमूर्त (एक और अनुरोध वर्ग, सभी गुणों को प्रतिलिपि बनाकर इसे कॉपी करना) नहीं करना चाहूंगा।
मेरे प्रश्न: बी>
क्या इकाई के ऑब्जेक्ट को उसके मूल डेटाकोन्टेक्स्ट के लिए एक मजबूत संदर्भ रखता है, इसे जीसी-एड होने से रोकता है? (मुझे लगता है कि ऐसा होता है, मसले 100% निश्चित होना चाहते हैं)
क्या आप लिनक से एसक्यूएल का प्रयोग करते समय सिफारिश की सलाह पर सलाह प्रदान कर सकते हैं जबकि डाटा लेयर अमूर्त को बनाए रखा जाना चाहिए? (आंशिक संपत्ति अद्यतनों सहित)
क्या एक ओपन सोर्स प्रोजेक्ट का उपयोग कर एक रिपॉजिटरी अमूर्त का उपयोग कर एसक्यूएल को एसएपी.नेट एमवीसी में लिंक करना है?
मेरा समाधान करने के लिए भंडार को क्रियान्वित करने के लिए IDisposable होना होगा उसके बाद मैं रिपॉजिटरी को कॉन्फ़िगरर में ऑनएक्शनएक्शीरिंग में नियंत्रक में एक उदाहरण चर के रूप में इन्स्तांत करेगा। तब मैं ऑनरसैटएक्सॉक्टेड में रिपॉजिटरी का निपटान करेगा जब तक आप परिणाम प्राप्त करते हैं, परिणामस्वरूप पहले ही प्रदान किया जा चुका है और किसी भी डेटा का उपयोग किया गया है। रिपॉजिटरी इसी तरह से इसके कन्स्ट्रक्टर में डाटा कंटैक्ट को इन्स्तांत करेगा और इसे निपटाए जाने पर इसे निपटाना होगा।
Comments
Post a Comment