Měl jsem spuštěné MySQL EF6 a migrace, když bylo vše v jednom projektu MVC. Rozdělil jsem to do vrstev (Jádro [Rozhraní/Entity], Data, Služby a Web) a začala se objevovat stejná chyba, o které se zmínil Loren.
Zjistilo se, že to nezískalo připojovací řetězec z aplikace MVC. Ukázalo se, že vše, co jsem musel udělat, bylo znovu vytvořit připojovací řetězec v App.config v mém projektu Data (kde se nachází DbContext a mapování).
Toto jsou kroky, které jsem podnikl, aby vše fungovalo:
Krok 1) Použijte NuGet k importu MySql.Data.Entities (aktuální verze k tomuto příspěvku je 6.8.3.0)
Krok 2) Přidejte následující do App.config a/nebo 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>
Krok 3) Nastavte svůj DbContext tak, aby používal 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);
}
}
}
Krok 4) Nastavte výchozí projekt na svůj datový projekt v konzole Správce balíčků
Krok 5) Použijte enable-migrations
, add-migration
, update-database
jako obvykle