MVC 3 + एफई 4.1एमवीसी में डीबीकॉन्टेक्स्ट को तत्काल और निपटाने का सबसे अच्छा तरीका क्या है?
मैं दो दृष्टिकोण DbContext से निपटने के लिए के बीच चुनने हूँ: Application_BeginRequest
में
- का दृष्टांत, यह
HttpContext.Current.Items
में डाल दिया औरApplication_EndRequest
में निपटाने। - (
DbContext
के लिए kindof आवरण) डिस्पोजेबल UnitOfWork बनाएँ औरusing(var unitOfWork = new UnitOfWork()) { ... }
के साथ प्रत्येक नियंत्रक कार्रवाई शुरू अपना अनुभव साझा करें: आप कौन-सी पसंद करेंगे? प्रत्येक दृष्टिकोण के लिए पेशेवर और विपक्ष क्या हैं?
ब्लॉक दृष्टिकोण का उपयोग करने से कुछ नुकसान हो रहे हैं। यह डेटाबेस के लिए कई दौर यात्रा और इकाई ढांचे में लेनदेन का दुरुपयोग का कारण बनता है। http://ayende.com/blog/4775/new-profiler-feature-avoid-writes-from-multiple-sessions-in-the-same-request – marvelTracker
क्यों अधिक राउंडट्रिप्स का कारण बनता है?एक http अनुरोध को अधिकांश मामलों में एक कार्रवाई चलाने की आवश्यकता होती है, इसलिए यदि आप ब्लॉक का उपयोग करके इस क्रिया में पूरे क्रिया का कोड लपेटते हैं तो पहले दृष्टिकोण की तुलना में अधिक डेटाबेस अनुरोध नहीं होंगे। 'प्रति क्रिया' दृष्टिकोण के साथ दूसरी बात यह है कि आपको हमेशा उस क्षेत्र के बारे में पता होना चाहिए जिसे डेटाबेस में शामिल किया जा सकता है और ब्लॉक को उचित रूप से रखा जा सकता है। उदाहरण के लिए यदि आपके मॉडल में कुछ समय में आलसी लोड होने के लिए कुछ संग्रह शामिल हैं, तो प्रतिपादन देखें, कथन लौटने वाला व्यू (मॉडल) ब्लॉक के अंदर होना चाहिए। – YMC
यदि आप यूनिटऑफवर्क के साथ नियंत्रक परत रैप में डीबीकॉन्टेक्स्ट का उपयोग करते हैं तो यूआई परत और आपके डेटाबेस दृष्टिकोण में मजबूत निर्भरता पैदा होती है। फिर आपको एक सेवा परत और रिपोजिटरी परत की आवश्यकता है। इसके बाद यदि आपके रिपॉजिटरीज़ में यूनिटऑफवर्क अलग-अलग ब्लॉक हैं जो ब्लॉक का उपयोग करते हैं जो एक समस्या होगी। क्योंकि प्रत्येक और प्रत्येक भंडार लेनदेन और अनावश्यक डेटाबेस दौर यात्रा बनाता है। अधिक जानकारी के लिए उपरोक्त लिंक देखें। यदि आप प्रति अनुरोध एक सेवा कॉल के बारे में निश्चित हैं तो आप सेवा विधि के अंदर यूनिटफवर्क का उपयोग कर सकते हैं। हालांकि, यह गारंटी नहीं है। – marvelTracker