Имах MySQL EF6 и миграции и работех, когато всичко беше в един MVC проект. Разделих го на слоеве (Core[Interfaces/Entitites], Data, Services и Web) и започнах да получавам същата грешка, спомената от Лорен.
Разбрах, че не улавя низа за връзка от приложението MVC. Оказа се, че всичко, което трябваше да направя, беше да създам отново низа за връзка в App.config в моя проект Data (където се намират DbContext и съпоставянията).
Това са стъпките, които предприех, за да заработя всичко:
Стъпка 1) Използвайте NuGet, за да импортирате MySql.Data.Entities (текущата версия към тази публикация е 6.8.3.0)
Стъпка 2) Добавете следното към App.config и/или 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>
Стъпка 3) Настройте своя DbContext да използва 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);
}
}
}
Стъпка 4) Задайте проекта по подразбиране на вашия проект с данни в конзолата на мениджъра на пакети
Стъпка 5) Използвайте enable-migrations
, add-migration
, update-database
както обикновено правите