Mysql
 sql >> база данни >  >> RDS >> Mysql

Динамична връзка с MySQL база данни за Entity Framework 6

Entity Framework 6 предлага някои удобни фини промени, които помагат както за работа с MySQL, така и за създаване на динамични връзки към базата данни.

Накарайте MySQL да работи с Entity Framework 6

Първо, към датата на отговора ми на този въпрос единствените драйвери за .Net конектори, съвместими с EF6, е MySQL .Net Connectior 6.8.1 (бета версия за разработка), който може да се намери на официалния уебсайт на MySQL тук .

След инсталирането се обърнете към следните файлове от вашето решение на Visual Studio:

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

Вие също ще трябва да копирате тези файлове някъде, където те ще бъдат достъпни за проекта по време на изграждане, като например директорията bin.

След това трябва да добавите някои елементи към вашия файл 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>

Ако промените defaultConnectionFactory от връзката към sql сървъра по подразбиране, не забравяйте да премахнете <parameter> възли, които са вложени в възела по подразбиранеConnectionFactory. MysqlConnectionFactory не приема никакви параметри за своя конструктор и ще се провали, ако параметрите все още са там.

На този етап е доста лесно да се свържете с MySQL с Entity, можете просто да се обърнете към connectionString по-горе по име. Имайте предвид, че ако се свързвате по име, това ще работи дори ако defaultConnectionFactory възел все още сочи към SQL Server (което прави по подразбиране).

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

Въпросът е просто да се свържете нормално:

ApplicationDbContext db = ApplicationDbContext();

Свързване с динамично избрано име на база данни

В този момент е лесно да се свържете с база данни, която можем да предадем като параметър, но има няколко неща, които трябва да направим.

Важна забележка

Ако все още не сте го направили, ТРЯБВА да промените defaultConnectionFactory в Web.config, ако искате да се свържете с MySQLdynamicly. Тъй като ще предаваме низ за връзка директно към конструктора на контекста, той няма да знае кой доставчик да използва и ще се обърне към своята фабрика за връзка по подразбиране, освен ако не е посочено в 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 база данни.

Надявам се това да помогне на някого :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете таблица в MySQL Workbench с помощта на GUI

  2. Как да преброите всички редове, когато използвате SELECT с LIMIT в MySQL заявка?

  3. Производителност на MySQL:MySQL/MariaDB индекси

  4. SELECT на View съдържа подзаявка в клаузата FROM

  5. Използване на Oracle JDeveloper с MySQL Database Service на Oracle Cloud Platform, част 3