- कनेक्शन पूलिंग को किसी अन्य ADO.NET एप्लिकेशन के रूप में संभाला जाता है। इकाई कनेक्शन अभी भी पारंपरिक कनेक्शन स्ट्रिंग के साथ पारंपरिक डेटाबेस कनेक्शन का उपयोग करता है। मेरा मानना है कि यदि आप इसका उपयोग नहीं करना चाहते हैं तो आप कनेक्शन स्ट्रिंग में कन्वेक्शन पूलिंग को बंद कर सकते हैं। ( SQL सर्वर कनेक्शन पूलिंग (ADO.NET) के बारे में अधिक पढ़ें )
- कभी भी वैश्विक संदर्भ का उपयोग न करें। ObjectContext आंतरिक रूप से पहचान मानचित्र और कार्य की इकाई सहित कई पैटर्न लागू करता है। वैश्विक संदर्भ का उपयोग करने का प्रभाव प्रति एप्लिकेशन प्रकार अलग है।
- वेब अनुप्रयोगों के लिए प्रति अनुरोध एकल संदर्भ का उपयोग करें। वेब सेवाओं के लिए प्रति कॉल एकल संदर्भ का उपयोग करें। WinForms या WPF आवेदन में प्रति प्रपत्र या प्रस्तुतकर्ता के लिए एकल संदर्भ का उपयोग करें। कुछ विशेष आवश्यकताएं हो सकती हैं जो इस दृष्टिकोण का उपयोग करने की अनुमति नहीं देंगी लेकिन ज्यादातर स्थिति में यह पर्याप्त है।
यदि आप जानना चाहते हैं कि WPF / WinForm एप्लिकेशन के लिए एकल वस्तु संदर्भ का क्या प्रभाव है, तो इस लेख को देखें । यह NHibernate सत्र के बारे में है लेकिन विचार समान है।
संपादित करें:
जब आप डिफ़ॉल्ट रूप से ईएफ का उपयोग करते हैं तो प्रत्येक इकाई को संदर्भ के अनुसार केवल एक बार लोड करता है। पहली क्वेरी एंटिटी इंस्टेंस बनाता है और इसे आंतरिक रूप से संग्रहीत करता है। किसी भी बाद की क्वेरी को उसी कुंजी के साथ इकाई की आवश्यकता होती है जो इस संग्रहीत उदाहरण को लौटाता है। यदि डेटा स्टोर के मान बदले गए हैं, तो आप अभी भी प्रारंभिक क्वेरी से मान के साथ इकाई प्राप्त करते हैं। इसे आइडेंटिटी मैप पैटर्न कहा जाता है । आप इकाई को फिर से लोड करने के लिए ऑब्जेक्ट संदर्भ को बाध्य कर सकते हैं लेकिन यह एक साझा उदाहरण को फिर से लोड करेगा।
जब तक आप SaveChanges
संदर्भ पर कॉल नहीं करते तब तक इकाई में किए गए किसी भी परिवर्तन को जारी नहीं रखा जाता है। आप कई संस्थाओं में बदलाव कर सकते हैं और उन्हें एक ही बार में स्टोर कर सकते हैं। इसे यूनिट ऑफ वर्क पैटर्न कहा जाता है । आप चुनिंदा रूप से यह नहीं कह सकते हैं कि आप किस संशोधित संस्था को बचाना चाहते हैं।
इन दो पैटर्न को मिलाएं और आपको कुछ दिलचस्प प्रभाव दिखाई देंगे। पूरे आवेदन के लिए आपके पास केवल एक ही इकाई है। इकाई में कोई भी परिवर्तन पूरे आवेदन को प्रभावित करता है, भले ही परिवर्तन अभी तक कायम न रहे हों (कमिटेड)। अधिकांश समय में यह वह नहीं है जो आप चाहते हैं। मान लीजिए कि आपके पास WPF एप्लिकेशन में एक संपादन फ़ॉर्म है। आप इकाई के साथ काम कर रहे हैं और आप जटिल संपादन (बदलते मूल्यों, संबंधित संस्थाओं को जोड़ने, अन्य संबंधित संस्थाओं को हटाने आदि) को रद्द करने का फैसला करते हैं। लेकिन इकाई को पहले से ही साझा संदर्भ में संशोधित किया गया है। आप क्या करेंगे? संकेत: मैं किसी भी रद्द करें या पूर्ववत् करें के बारे में नहीं जानता ObjectContext
।
मुझे लगता है कि हमें सर्वर परिदृश्य पर चर्चा करने की आवश्यकता नहीं है। बस कई HTTP अनुरोधों या वेब सेवा कॉल के बीच एकल इकाई साझा करने से आपका एप्लिकेशन बेकार हो जाता है। कोई भी अनुरोध केवल SaveChanges
आंशिक डेटा को किसी अन्य अनुरोध से ट्रिगर और सहेज सकता है क्योंकि आप उन सभी के बीच काम की एकल इकाई साझा कर रहे हैं। इससे एक और समस्या भी होगी - संदर्भ और संदर्भ में संस्थाओं के साथ कोई हेरफेर या संदर्भ द्वारा उपयोग किया जाने वाला डेटाबेस कनेक्शन थ्रेड सुरक्षित नहीं है।
यहां तक कि आसानी से एक आवेदन के लिए एक वैश्विक संदर्भ एक अच्छा विकल्प नहीं है क्योंकि आप शायद हर बार जब आप आवेदन को क्वेरी करते हैं तो ताजा डेटा चाहते हैं।