Tôi đã có MySQL EF6 và Migrations và hoạt động khi mọi thứ nằm trong một dự án MVC. Tôi chia nó thành các lớp (Core [Interfaces / Entitites], Data, Services và Web) và bắt đầu gặp lỗi tương tự như Loren đã đề cập.
Phát hiện ra rằng nó không nhận chuỗi kết nối từ ứng dụng MVC. Hóa ra tất cả những gì tôi phải làm là tạo lại chuỗi kết nối trong App.config trong dự án Dữ liệu của tôi (nơi chứa DbContext và các ánh xạ).
Đây là các bước tôi đã thực hiện để mọi thứ hoạt động:
Bước 1) Sử dụng NuGet để nhập MySql.Data.Entities (phiên bản hiện tại của bài đăng này là 6.8.3.0)
Bước 2) Thêm phần sau vào App.config và / hoặc 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>
Bước 3) Thiết lập DbContext của bạn để sử dụng 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);
}
}
}
Bước 4) Đặt Dự án mặc định thành dự án Dữ liệu của bạn trong Bảng điều khiển Trình quản lý Gói
Bước 5) Sử dụng enable-migrations
, add-migration
, update-database
như bạn thường làm