2011-01-31 11 views
5

फ्रैंकली मैं सी # और एएसपीएनटी एमवीसी दोनों में नौसिखिया हूं। मुझे यह भी नहीं पता कि एएसपीनेट वेब एप्लिकेशन वास्तव में दृश्य के पीछे आईआईएस और एएसपी.नेट ढांचे पर कैसे काम करता है।नियंत्रक वर्ग में डीबीकॉन्टेक्स्ट के ग्लोबल.एएसएक्स बनाम उदाहरण क्षेत्र में डीबीकॉन्टेक्स्ट का स्टेटिक फ़ील्ड?

मैं इस निर्णय से उलझन में हूं जहां मुझे अपने एएसपीनेट एमवीसी एप्लिकेशन में डीबीकॉन्टेक्स्ट (या डीबीकॉन्टेक्स्ट से व्युत्पन्न किसी भी वर्ग) का एक क्षेत्र घोषित करना है।

  1. global.asax अंदर एक स्थिर क्षेत्र के रूप में क्षेत्र घोषित ऐसा है कि सभी नियंत्रकों यह का उपयोग कर सकते:

    मैं दो विकल्प हैं।

  2. फ़ील्ड को प्रत्येक नियंत्रक वर्ग के अंदर एक उदाहरण फ़ील्ड के रूप में घोषित करें।

क्या आप समझा सकते हैं कि कौन सा सही है? अधिक विस्तृत स्पष्टीकरण वास्तव में जरूरी है।

उत्तर

8

यदि आप इसे वैश्विक.एक्सएक्स में एक स्थिर क्षेत्र बनाते हैं, तो आप समवर्ती समस्याओं में भाग लेंगे। एकाधिक अनुरोधों से कई धागे आ सकते हैं और एक दूसरे के डेटा प्राप्त कर सकते हैं। इससे भी बदतर यह है कि जब तक आप अपनी वेबसाइट पर अधिक ट्रैफिक प्राप्त नहीं करते हैं, तब तक यह तब तक प्रदर्शित नहीं होगा जब तक आप लोड परीक्षण शुरू नहीं करते। आप इसे सिंगलटन के रूप में कार्यान्वित करेंगे, सभी आपके परीक्षण में अच्छी तरह से काम करेंगे, और आप सोचेंगे, "मैं एक प्रतिभाशाली हूं! देखो कि यह कार्यान्वयन कितना साफ है!" लेकिन किसी दिन, जैसा कि मैंने किया है, आप इसे जला देंगे। परिणाम मिश्रित हो जाएंगे, उपयोगकर्ता उन डेटा को देखना शुरू कर देंगे जो उनके नहीं हैं, और वेबसाइट अप्रत्याशित रूप से व्यवहार करेगी।

एंटीटी फ्रेमवर्क और LINQ से SQL दोनों के लिए संदर्भ कक्षाओं को हल्के तत्कालता के लिए डिज़ाइन किया गया था, जो आप प्रत्येक क्वेरी के सेट के लिए सेट अप करते हैं। यह लंबे समय तक रहने का मतलब नहीं है।

Check out this other Stack Overflow question/answer on the same topic, worded differently.

4

आपको दूसरे विकल्प के साथ जाना चाहिए। यानी नियंत्रक में घोषित करें और इसका इस्तेमाल करें। यदि आप वैश्विक.एक्सएक्स में एक स्थिर क्षेत्र के रूप में डीबीसीएन्टेक्स्ट डालते हैं, तो आप मूल रूप से पूरे एप्लिकेशन के लिए एक उदाहरण बना रहे हैं।

दूसरी तरफ, दूसरे विकल्प के साथ आपके पास प्रत्येक अनुरोध के लिए डीबीकॉनटेक्स्ट है। यदि आप प्रत्येक एक्शन विधि में डीबीसीएन्टेक्स्ट प्राप्त करने के लिए निर्भरता इंजेक्शन का उपयोग कर सकते हैं तो यह बेहतर होगा।

+0

क्या दोष यह है कि अगर मैं पूरे आवेदन के लिए DbContext का एक उदाहरण (या वर्ग DbContext से प्राप्त) का इस्तेमाल करते हैं है? – LaTeX

+2

@ स्टैक ओवरफ़्लो - डेटाबेस कनेक्शन के संदर्भ में "सिंगलेट्स" पर पढ़ें, और यह बुरा क्यों है। – RPM1984

संबंधित मुद्दे