Mysql
 sql >> Database >  >> RDS >> Mysql

MySql Connector 6.8.2 RC, Entity Framework 6 e Code First

Avevo MySQL EF6 e Migrations attivi e funzionanti quando tutto era in un progetto MVC. L'ho suddiviso in livelli (Core[Interfaces/Entitites], Data, Services e Web) e ho iniziato a ricevere lo stesso errore menzionato da Loren.

Ho capito che non stava raccogliendo la stringa di connessione dall'app MVC. Si scopre che tutto ciò che dovevo fare era ricreare la stringa di connessione all'interno di App.config nel mio progetto Data (dove risiedono DbContext e le mappature).

Questi sono i passaggi che ho fatto per far funzionare tutto:

Passaggio 1) Usa NuGet per importare MySql.Data.Entities (la versione attuale di questo post è 6.8.3.0)

Passaggio 2) Aggiungi quanto segue a App.config e/o 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>

Passaggio 3) Configura il tuo DbContext per utilizzare MySql:

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);
        }
    }
}

Passaggio 4) Imposta il progetto predefinito sul tuo progetto Dati nella Console di gestione pacchetti

Passaggio 5) Usa enable-migrations , add-migration , update-database come faresti normalmente