Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Connector 6.8.2 RC, Entity Framework 6 und Code First

Ich hatte MySQL EF6 und Migrationen in Betrieb, als sich alles in einem MVC-Projekt befand. Ich teilte es in Schichten auf (Core [Interfaces/Entitites], Data, Services und Web) und fing an, den gleichen Fehler zu bekommen, den Loren erwähnte.

Herausgefunden, dass die Verbindungszeichenfolge nicht von der MVC-App abgerufen wurde. Es stellte sich heraus, dass ich lediglich die Verbindungszeichenfolge innerhalb der App.config in meinem Datenprojekt (wo sich der DbContext und die Zuordnungen befinden) neu erstellen musste.

Dies sind die Schritte, die ich unternommen habe, um alles zum Laufen zu bringen:

Schritt 1) Verwenden Sie NuGet, um MySql.Data.Entities zu importieren (aktuelle Version zum Zeitpunkt dieses Beitrags ist 6.8.3.0)

Schritt 2) Fügen Sie Folgendes zu App.config hinzu und/oder Web.config :

<connectionStrings>
    <add name="MyDB" providerName="MySql.Data.MySqlClient" connectionString="Data Source=localhost; port=3306; Initial Catalog=mydb; uid=myuser; pwd=mypass;" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>

Schritt 3) Richten Sie Ihren DbContext für die Verwendung von MySql ein:

using MyApp.Core.Entities.Directory;
using MyApp.Data.Mapping;
using System.Data.Entity;

namespace MyApp.Data
{
    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class MyContext : DbContext
    {
        public MyContext() : this("MyDB") { }
        public MyContext(string connStringName) : base(connStringName) {}
        static MyContext ()
        {
            // static constructors are guaranteed to only fire once per application.
            // I do this here instead of App_Start so I can avoid including EF
            // in my MVC project (I use UnitOfWork/Repository pattern instead)
            DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
        }

        public DbSet<Country> Countries { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // I have an abstract base EntityMap class that maps Ids for my entities.
            // It is used as the base for all my class mappings
            modelBuilder.Configurations.AddFromAssembly(typeof(EntityMap<>).Assembly);
            base.OnModelCreating(modelBuilder);
        }
    }
}

Schritt 4) Legen Sie das Standardprojekt in der Paket-Manager-Konsole auf Ihr Datenprojekt fest

Schritt 5) Verwenden Sie enable-migrations , add-migration , update-database wie Sie es normalerweise tun würden