Saya memiliki MySQL EF6 dan Migrasi dan bekerja ketika semuanya dalam satu proyek MVC. Saya membaginya menjadi beberapa lapisan (Inti[Antarmuka/Entitas], Data, Layanan, dan Web) dan mulai mendapatkan kesalahan yang sama yang disebutkan Loren.
Menemukan bahwa itu tidak mengambil string koneksi dari aplikasi MVC. Ternyata yang harus saya lakukan hanyalah membuat ulang string koneksi dalam App.config di proyek Data saya (tempat DbContext dan pemetaan berada).
Ini adalah langkah-langkah yang saya ambil untuk membuat semuanya berfungsi:
Langkah 1) Gunakan NuGet untuk mengimpor MySql.Data.Entities (versi saat ini pada posting ini adalah 6.8.3.0)
Langkah 2) Tambahkan yang berikut ini ke App.config dan/atau 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>
Langkah 3) Siapkan DbContext Anda untuk menggunakan 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);
}
}
}
Langkah 4) Setel Proyek Default ke proyek Data Anda di Konsol Pengelola Paket
Langkah 5) Gunakan enable-migrations
, add-migration
, update-database
seperti biasanya