दिलचस्प पोस्ट
ऑनटैब चयनित चयनित नहीं कहा जाता है एक लैन से जुड़े सभी कंप्यूटरों का आईपी पता सूचीबद्ध करें AngularJS – regex का उपयोग करते हुए इनपुट-बॉक्स से अग्रणी और अनुक्रमित सफेद स्थान निकालें स्ट्रिंग में वैरिएबल (ऑब्जेक्ट) का नाम कैसे परिवर्तित करें एक्सकोड 4: बिल्ड विफल, कोई समस्या नहीं जावा डोम के साथ XML नोड पाठ मान प्राप्त करना प्रोग्राम समाप्ति के मामले में मैं एक बंदरगाह को कैसे बंद कर सकता हूं? स्ट्रिंग प्रतिनिधित्व से मैं सामान्य प्रकार कैसे प्राप्त करूं? वेब पेज में वीडियो एम्बेड करने के बाद यूट्यूब ब्रांडिंग को कैसे हटाएं? क्या मैं तालिका स्तंभ में कोई डेटा प्रदर्शित करने के लिए शून्य या रिक्त स्ट्रिंग का उपयोग करना चाहिए? PHP में अपलोड किए गए फ़ाइल प्रकार की जांच कैसे करें कोणीय HTML बाइंडिंग यदि एक HTML फ़ॉर्म में दो <input type = "submit"> बटन हैं, तो मुझे कैसे पता चलेगा कि किस पर क्लिक किया गया? यूट्यूब एपीआई के साथ एकाधिक वीडियो प्लेयर लोड हो रहा है क्रोम सत्र कुकीज़ को हटा नहीं करता है

इकाई फ़्रेमवर्क 6 के लिए डायनामिक MySQL डाटाबेस कनेक्शन

मैं एक डायनामिक कनेक्शन स्ट्रिंग एंटिटी फ़्रेमवर्क प्रसंग को पास करना चाहता हूं। मेरे पास 150 से अधिक स्कीमा हैं जो एक समान हैं (एक खाता प्रति) और मैं इस तरह कनेक्शन का चयन करना चाहता हूं:

ApplicationDbContext db = new ApplicationDbContext("dbName"); 

सिद्धांत में यह काफी आसान होगा, क्योंकि मैं एक कनेक्शन स्ट्रिंग बना सकता हूं और इसे कन्स्ट्रक्टर के तर्क के रूप में पास कर सकता हूं, उदाहरण के लिए:

 public ApplicationDbContext(string dbName) : base(GetConnectionString(dbName)) { } public static string GetConnectionString(string dbName) { // The connectionString passed is something like: // Server=localhost;Database={0};Uid=username;Pwd=password var connString = ConfigurationManager .ConnectionStrings["MyDatabase"] .ConnectionString .ToString(); return String.Format(connString, dbName); } 

मैं सफलतापूर्वक कनेक्ट कर सकता हूँ जब मैं बस कनेक्शन स्ट्रिंग नाम पास करता हूँ, लेकिन जब मैं इसे गतिशील रूप से निम्न के रूप में उत्पन्न करता हूं अब मुझे पता है कि यह इसलिए है क्योंकि web.config में कनेक्शन स्ट्रिंग में providerName="MySql.Data.MySqlClient" विशेषता है।

जब मैं कनेक्शन में डायनामिक रूप से वास्तविक कनेक्शन स्ट्रिंग पास करता हूं, तो यह मानता है कि MySQL के बजाय SQL सर्वर से कनेक्ट होने की आवश्यकता होती है और कनेक्शन स्ट्रिंग के कारण अमान्य होने में विफल रहता है।

प्रश्न यह है कि मैं प्रदाता नाम को कनेक्शन स्ट्रिंग में कैसे पास कर सकता हूं अगर मैं गतिशील रूप से इसे बना रहा हूं?

Solutions Collecting From Web of "इकाई फ़्रेमवर्क 6 के लिए डायनामिक MySQL डाटाबेस कनेक्शन"

इकाई फ़्रेमवर्क 6 कुछ आसान सूक्ष्म परिवर्तन प्रदान करता है जो दोनों को MySQL काम कर रही है और गतिशील डेटाबेस कनेक्शन भी बना रही है।

MySQL को इकाई फ़्रेमवर्क 6 के साथ काम करना

सबसे पहले, मेरे इस प्रश्न का उत्तर देने की तारीख में, EF6 के साथ संगत केवल नेट कनेक्टर ड्राइवर MySQL .Net Connectior 6.8.1 (बीटा डेवलपमेंट संस्करण) है जो आधिकारिक MySQL वेबसाइट पर पाया जा सकता है ।

स्थापित करने के बाद, निम्न दृश्य फ़ाइलों को आपके Visual Studio समाधान से संदर्भित करें:

  • Mysql.Data.dll
  • Mysql.Data.Entity.EF6.dll

आपको इन फ़ाइलों की कहीं भी प्रतिलिपि बनाने की आवश्यकता होगी, जहां बिल्ड समय के दौरान प्रोजेक्ट के लिए पहुंच जाएगा, जैसे कि बिन निर्देशिका।

इसके बाद, आपको अपने वेब। कॉन्फ़िग (या ऐप.कॉन्फिग पर अगर डेस्कटॉप आधारित) फ़ाइल में कुछ आइटम जोड़ना होगा।

एक कनेक्शन स्ट्रिंग:

 <connectionStrings> <add name="mysqlCon" connectionString="Server=localhost;Database=dbName;Uid=username;Pwd=password" providerName="MySql.Data.MySqlClient" /> </connectionStrings> 

इसके अलावा, <entityFramework /> और <providers /> नोड्स के भीतर प्रदाता को जोड़ दें, वैकल्पिक रूप से (यह मेरे जवाब के दूसरे भाग में, जब गतिशील रूप से परिभाषित डाटाबेस के साथ व्यवहार करना होता है, एक निश्चित होना चाहिए) आप <defaultConnectionFactory /> नोड को बदल सकते हैं:

 <entityFramework> <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> </providers> </entityFramework> 

यदि आप डिफ़ॉल्ट एसक्यूएल सर्वर कनेक्शन से डिफ़ॉल्ट कनेक्शन बदलते हैं, तो <parameter> नोड्स जो कि defaultConnectionFactory नोड में नेस्टेड हैं, को हटाने के लिए मत भूलें। MysqlConnectionFactory इसके निर्माता के लिए कोई पैरामीटर नहीं लेता है और यदि पैरामीटर अभी भी वहां हैं तो विफल हो जाएगा

इस स्तर पर, MySQL को इकाई के साथ जोड़ने में काफी आसान है, आप केवल नाम से उपरोक्त connectionString का उल्लेख कर सकते हैं। नोट करें कि यदि नाम से कनेक्ट हो रहा है, तो यह defaultConnectionFactory भी काम करेगा जब defaultConnectionFactory नोड अभी भी SQL सर्वर पर इंगित करता है (जो इसे डिफ़ॉल्ट रूप से करता है)।

 public class ApplicationDbContext: DbContext { public ApplicationDbContext() : base("mysqlCon") { } } 

यह सामान्य रूप से कनेक्ट होने का मामला है:

 ApplicationDbContext db = ApplicationDbContext(); 

गतिशील रूप से चयनित डेटाबेस नाम से कनेक्ट करना

इस बिंदु पर एक डेटाबेस से जुड़ना आसान है जिसे हम एक पैरामीटर के रूप में पारित कर सकते हैं, लेकिन कुछ चीजें हैं जो हमें करने की आवश्यकता है

महत्वपूर्ण लेख

यदि आपके पास पहले से ही नहीं है, तो आपको वेब कनेक्शन में defaultConnectionFactory को बदलना होगा यदि आप MySQL से गतिशील रूप से कनेक्ट करना चाहते हैं चूंकि हम सीधे कनेक्शन कन्स्ट्रक्टर को एक कनेक्शन स्ट्रिंग पास करेंगे, इसलिए यह पता नहीं होगा कि किस प्रदाता का उपयोग करना है और इसके डिफ़ॉल्ट कनेक्शन कारखाने तक बंद हो जाएगा जब तक कि web.config में निर्दिष्ट नहीं किया गया है। यह कैसे करना है पर ऊपर देखें

आप मैन्युअल रूप से संदर्भ स्ट्रिंग को इस तरह से पास कर सकते हैं:

 public ApplicationDbContext() : base("Server:localhost;...") { } 

लेकिन इसे थोड़ा आसान बनाने के लिए, हम mySQL को सेट करते समय ऊपर दिए गए कनेक्शन स्ट्रिंग में एक छोटा परिवर्तन कर सकते हैं। बस नीचे दिखाए गए अनुसार एक प्लेसहोल्डर जोड़ें:

 <add name="mysqlCon" connectionString="Server=localhost;Database={0};Uid=username;Pwd=password" providerName="MySql.Data.MySqlClient" /> 

अब हम एक सहायक विधि का निर्माण कर सकते हैं और नीचे दिखाए अनुसार ApplicationDbContext वर्ग को बदल सकते हैं:

 public class ApplicationDbContext: DbContext { public ApplicationDbContext(string dbName) : base(GetConnectionString(dbName)) { } public static string GetConnectionString(string dbName) { // Server=localhost;Database={0};Uid=username;Pwd=password var connString = ConfigurationManager.ConnectionStrings["mysqlCon"].ConnectionString.ToString(); return String.Format(connString, dbName); } } 

यदि आप डेटाबेस माइग्रेशन का उपयोग कर रहे हैं, तो निम्न चरण महत्वपूर्ण है

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

उस समस्या को हल करने के लिए अपने संदर्भ वर्ग के नीचे (या कहीं भी वास्तव में) निम्न वर्ग जोड़ें

 public class MigrationsContextFactory : IDbContextFactory<ApplicationDbContext> { public ApplicationDbContext Create() { return new ApplicationDbContext("developmentdb"); } } 

आपका कोड-पहले माइग्रेशन और बीज विधि अब आपके MySQL डाटाबेस में developmentdb डीबी स्कीमा को लक्षित करेगा।

उम्मीद है कि यह किसी को मदद करता है 🙂