@jrummell केवल आंशिक रूप से सही है। एंटिटी फ्रेमवर्क प्रति डेटाबेस एक डीबीकॉन्टेक्स्ट प्रकार, बनाएगा यदि आप इसे अपने डिवाइस पर छोड़ दें। "बाध्य संदर्भ" की अवधारणा का उपयोग करते हुए @NeilThompson ने जूली लेरहमैन से उल्लेख किया है, आप जो भी कर रहे हैं वह वास्तव में एक ही डेटाबेस का उपयोग करने के लिए प्रत्येक संदर्भ को बता रहा है। ताकि प्रत्येक DbContext कि यह लागू करता है एक ही डाटाबेस पर समाप्त होता है जूली की विधि एक सामान्य पैटर्न का उपयोग करता है, लेकिन आप हर एक है, जो ऐसा दिखाई देगा मैन्युअल रूप से इसे कर सकता है:
public class MyContext : DbContext
{
public MyContext()
: base("name=DatabaseConnectionStringNameHere")
{
Database.SetInitializer(null);
}
}
दूसरे शब्दों में, जूली की विधि सिर्फ सेट में एक बेस क्लास अप करें कि आपके प्रत्येक संदर्भ से यह टुकड़ा स्वचालित रूप से इस टुकड़े को संभाल सकता है।
यह दो चीजें करता है: 1) यह आपके संदर्भ को एक विशिष्ट डेटाबेस का उपयोग करने के लिए कहता है (यानी।, हर दूसरे संदर्भ के समान) और 2) यह आपके संदर्भ को डेटाबेस प्रारंभिकता को अक्षम करने के लिए बताता है। यह अंतिम भाग महत्वपूर्ण है क्योंकि इन संदर्भों को अब डेटाबेस-प्रथम के रूप में अनिवार्य रूप से माना जाता है। दूसरे शब्दों में, अब आपके पास कोई संदर्भ नहीं है जो वास्तव में डेटाबेस बनने का कारण बन सकता है, या सिग्नल करने के लिए कि माइग्रेशन होने की आवश्यकता है। नतीजतन, आपको वास्तव में अन्य "मास्टर" संदर्भ की आवश्यकता है जिसमें आपके आवेदन में प्रत्येक इकाई होगी। माइग्रेशन बनाने और अपने डेटाबेस को अपडेट करने के अलावा आपको किसी भी चीज़ के लिए इस संदर्भ का उपयोग करने की आवश्यकता नहीं है। अपने कोड के लिए, आप अपने अधिक विशेष संदर्भों का उपयोग कर सकते हैं।
विशेष संदर्भों के साथ ध्यान में रखने की दूसरी बात यह है कि प्रत्येक संदर्भ का प्रत्येक तत्कालता अद्वितीय स्थिति का प्रतिनिधित्व करता है, भले ही वे संस्थाएं साझा करते हैं। उदाहरण के लिए, एक संदर्भ से Cat
इकाई एक दूसरे संदर्भ से Cat
इकाई जैसी ही चीज़ है, भले ही वे वही प्राथमिक कुंजी साझा करें। यदि आपने पहले संदर्भ से Cat
पुनर्प्राप्त किया है, तो इसे अपडेट किया गया है, और इसे फिर से दूसरे संदर्भ के माध्यम से सहेजने का प्रयास किया है, तो आपको एक त्रुटि मिलेगी। यह उदाहरण थोड़ा सा योगदान है क्योंकि आपके पास दो अलग-अलग संदर्भों में स्पष्ट रूप से एक ही इकाई होने की संभावना नहीं है, लेकिन जब आप विदेशी कुंजी संबंधों में शामिल होते हैं और इस समस्या में भाग लेने के लिए यह कहीं अधिक आम है। भले ही आप संबंधित इकाई के लिए DbSet
स्पष्ट रूप से घोषित नहीं करते हैं, फिर भी संदर्भ में एक इकाई इस पर निर्भर करती है, ईएफ इसके लिए DbSet
अंतर्निहित रूप से तैयार करेगा। यह सब कहना है कि यदि आप विशेष संदर्भों का उपयोग करते हैं, तो आपको यह सुनिश्चित करना होगा कि वे वास्तव में विशिष्ट हैं और शून्य संबंधित वस्तुओं के किसी भी स्तर पर क्रॉसओवर है।
स्रोत
2013-04-12 21:31:12
धन्यवाद, आपका उत्तर बिंदु पर था। दुर्भाग्य से, मैं अपने आवेदन के लिए केवल एक डेटाबेस का उपयोग करने के लिए बाध्य हूँ। जैसा कि मैं आपके उत्तर से समझता हूं, इसका मतलब है कि मुझे एक 'डीबीकॉन्टेक्स्ट' प्रकार का उपयोग करना होगा, इससे कोई फर्क नहीं पड़ता कि क्या सही है? –
नहीं, यह मामला –
नहीं है, यह सिर्फ डिफ़ॉल्ट सम्मेलन है। यदि आपके प्रत्येक संदर्भ में एक ही कनेक्शन स्ट्रिंग है, तो इसे काम करना चाहिए। हालांकि, अगर आप माइग्रेशन का उपयोग करना चाहते हैं, तो आपको प्रति संदर्भ एक अलग डेटाबेस की आवश्यकता होगी। – jrummell