2012-05-09 9 views
10

मेरे पास कई डेटाबेस हैं, उनमें से स्कीमा समान हैं। जब मैं डेटाबेस-प्रथम का उपयोग करता हूं, तो जब मैं edmx फ़ाइल बनाता हूं तो कनेक्शन स्ट्रिंग निर्दिष्ट होती है। मैं जानना चाहता हूं, क्या कनेक्शन स्ट्रिंग को बदलने का कोई तरीका है? यह है, इसलिए मैं चुन सकता हूं कि कौन सा डेटाबेस संचालित करना है। अग्रिम में Thx!क्या पहले डेटाबेस में कनेक्शन स्ट्रिंग को बदलने का कोई तरीका है?

उत्तर

4

web.config फ़ाइल में कनेक्शन स्ट्रिंग बदलें।

<connectionStrings> 
    <add name="SandBoxEntities" connectionString="metadata=r... /> 
    </connectionStrings> 

मैं वास्तविक कनेक्शन स्ट्रिंग संक्षिप्त क्योंकि यह महत्वपूर्ण नहीं है - बस तुम क्या web.config फ़ाइल में देखने के लिए की एक विचार देना चाहता था।

आप प्रोग्रामिंग रूप से अपने कनेक्शन स्ट्रिंग भी बदल सकते हैं। Example 16.2. Programmatically modifying an EntityConnectionString देखें।

+0

मैं जानता हूँ कि web.config में कनेक्शन स्ट्रिंग सेट करने का तरीका, क्या मैं जानना चाहता हूँ कि कैसे रनटाइम पर इसे बदलने के लिए है, यह है, इसलिए मैं चुन सकता हूं कि कौन से डेटाबेस का उपयोग करना है। जब मैं edmx फ़ाइल बनाता हूं, तो कनेक्शन स्ट्रिंग पहले ही सेट हो चुकी है, क्या इसे रनटाइम पर बदलने का कोई तरीका है? – James

+0

ठीक है - मैंने अपना जवाब संपादित किया और आपको एक लिंक दिया जो आपको दिखाता है कि यह कैसे करना है। –

+0

इस प्रश्न और उत्तर ने पूरी चीज को सुविधाजनक संक्षेप में रखा: http://stackoverflow.com/questions/14440698/setup-entity-framework-for- गतिशील- कनेक्शन- स्ट्रिंग। –

22

हम अपने web.configs में कनेक्शन तारों को स्टोर नहीं करते हैं, इसलिए स्वीकृत समाधान हमारे लिए काम नहीं करेगा। आप बस आधार DbContext निर्माता के माध्यम से कनेक्शन स्ट्रिंग प्रदान करने के लिए प्रयास करते हैं, तो आपको निम्न अपवाद मिल जाएगा:

कोड डाटाबेस पहला और मॉडल सबसे पहले विकास के लिए टी -4 टेम्पलेट का उपयोग कर ठीक से काम न उत्पन्न करता है, तो कोड में इस्तेमाल किया पहला मोड डेटाबेस फर्स्ट या मॉडल का उपयोग जारी रखने के लिए पहले सुनिश्चित करें कि एंटीटी फ्रेमवर्क कनेक्शन स्ट्रिंग निष्पादन अनुप्रयोग की कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट है। इन कक्षाओं का उपयोग करने के लिए, जिन्हें डाटाबेस फर्स्ट या मॉडल फर्स्ट से जेनरेट किया गया था, कोड फर्स्ट के साथ एट्रिब्यूट्स या डीबीमोडेलबिल्डर एपीआई का उपयोग करके कोई अतिरिक्त कॉन्फ़िगरेशन जोड़ें और फिर इस अपवाद को फेंकने वाले कोड को हटा दें। इस प्रकार

इसके समाधान के लिए, अपने संदर्भ के एक आंशिक वर्ग बना सकते हैं और अतिरिक्त एफई मेटाडाटा के साथ अपने कनेक्शन स्ट्रिंग को फ़ॉर्मेट (जहां MyContext अपने संदर्भ मॉडल का नाम है (उदाहरण के लिए अपने मॉडल का नाम, MyModel.edmx है की तुलना में कोड में MyContext नीचे सभी तीन एक्सटेंशन के साथ MyModel साथ बदल दिया है, .ssdl, .msl इस्तेमाल किया .csdl)):

public partial class MyContext 
{ 
    public MyContext(string connStr) 
     : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr)) 
    { 
    } 
} 
+1

मेरे लिए यह काम करने के लिए, मुझे " को इस उत्तर में वर्णित एक उद्धरण में बदलने की आवश्यकता है: http://stackoverflow.com/a/7004173/994464 – Brenton

+0

सरल और सरल। –

1

आप web.config में कई कनेक्शन स्ट्रिंग को परिभाषित करने और तो शायद अपने कोड में उनका उपयोग कर सकते आपका काम। उदाहरण के लिए : `

<connectionStrings> 
    <add name="conStr1" connectionString="metadata=r... /> 
</connectionStrings>` 

<connectionStrings> 
    <add name="conStr2" connectionString="metadata=r... /> 
</connectionStrings>` 

और इतने

और अपने संदर्भ वर्ग निर्माता पर पैरामीटर के रूप में कनेक्शन स्ट्रिंग नाम:

public MyContext(string connStr) 
    : base(connStr) { } 

ठीक है। अब आप नीचे के रूप में अपने कोड में उपयोग कर सकते हैं:

using (var db = new MyContext("name=conStr1")) 
{ 
    //your code here 
} 

और फिर

using (var db = new MyContext("name=conStr2")) 
{ 
    //your code here 
} 
संबंधित मुद्दे

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