एंटिटी फ्रेमवर्क 6 कुछ आसान सूक्ष्म परिवर्तन प्रदान करता है जो MySQL को काम करने और गतिशील डेटाबेस कनेक्शन बनाने दोनों में सहायता करता है।
MySQL को Entity Framework 6 के साथ काम करना
सबसे पहले, मेरे इस प्रश्न का उत्तर देने की तिथि पर, EF6 के साथ संगत एकमात्र .Net कनेक्टर ड्राइवर MySQL .Net Connectior 6.8.1 (बीटा विकास संस्करण) है जो यहां आधिकारिक MySQL वेबसाइट पर ।
स्थापित करने के बाद, अपने विजुअल स्टूडियो समाधान से निम्नलिखित फाइलों का संदर्भ लें:
- Mysql.Data.dll
- Mysql.Data.Entity.EF6.dll
आपको इन फ़ाइलों को कहीं भी कॉपी करने की आवश्यकता होगी जहां वे निर्माण समय के दौरान परियोजना के लिए सुलभ होंगे, जैसे कि बिन निर्देशिका।
इसके बाद, आपको अपनी Web.config (या App.config यदि डेस्कटॉप आधारित है) फ़ाइल में कुछ आइटम जोड़ने होंगे।
एक कनेक्शन स्ट्रिंग:
<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>
यदि आप डिफ़ॉल्ट sql सर्वर कनेक्शन से defaultConnectionFactory बदलते हैं, तो <parameter>
को हटाना न भूलें नोड जो डिफ़ॉल्ट कनेक्शन फैक्ट्री नोड में नेस्टेड हैं। MysqlConnectionFactory अपने कंस्ट्रक्टर के लिए कोई पैरामीटर नहीं लेता है और अगर पैरामीटर अभी भी हैं तो विफल हो जाएगा।
इस स्तर पर, MySQL को Entity से कनेक्ट करना काफी आसान है, आप केवल ऊपर दिए गए कनेक्शनस्ट्रिंग को नाम से देख सकते हैं। ध्यान दें कि नाम से कनेक्ट होने पर यह काम करेगा, भले ही defaultConnectionFactory
नोड अभी भी SQL सर्वर पर इंगित करता है (जो यह डिफ़ॉल्ट रूप से करता है)।
public class ApplicationDbContext: DbContext
{
public ApplicationDbContext() : base("mysqlCon")
{
}
}
यह सामान्य रूप से कनेक्ट होने की बात है:
ApplicationDbContext db = ApplicationDbContext();
डायनेमिक रूप से चयनित डेटाबेस नाम से कनेक्ट करना
इस बिंदु पर एक डेटाबेस से कनेक्ट करना आसान है जिसे हम एक पैरामीटर के रूप में पास कर सकते हैं, लेकिन कुछ चीजें हैं जो हमें करने की आवश्यकता है।
महत्वपूर्ण नोट
<ब्लॉकक्वॉट>यदि आपने पहले से नहीं किया है, तो आपको Web.config में डिफ़ॉल्टConnectionFactory को बदलना होगा यदि आप 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 फ्रेमवर्क द्वारा आपके Seed मेथड को पास कर दिया जाएगा और यह विफल हो जाएगा क्योंकि यह डेटाबेस नाम के लिए हमारे द्वारा डाले गए पैरामीटर में पास नहीं होगा।
उस समस्या को हल करने के लिए निम्न वर्ग को अपने संदर्भ वर्ग (या वास्तव में कहीं भी) के निचले भाग में जोड़ें।
public class MigrationsContextFactory : IDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext Create()
{
return new ApplicationDbContext("developmentdb");
}
}
आपके कोड-प्रथम माइग्रेशन और बीज विधियां अब developmentdb
. को लक्षित करेंगी अपने MySQL डेटाबेस में स्कीमा।
आशा है कि यह किसी की मदद करेगा :)