如何在 ASP.NET 5 中使用 Entity Framework 6 和 MySQL?

How do I use Entity Framework 6 with MySQL in ASP.NET 5?

我有一个使用 ASP.NET MVC 4、Entity Framework 6 和 MySQL 的现有网站。我正在尝试将其升级到 ASP.NET 5,但想继续使用 Entity Framework 6,因为 Entity Framework 缺少一些功能并且尚不支持 MySQL。如何在 ASP.NET 5 中使用 EF6?

由于 Web.config 不再与 ASP.NET 5 一起使用,您需要使用 code-based configuration 来配置它。为此,创建一个新的 class 继承自 DbConfiguration:

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        // Register ADO.NET provider
        var dataSet = (DataSet)ConfigurationManager.GetSection("system.data");
        dataSet.Tables[0].Rows.Add(
            "MySQL Data Provider",
            ".Net Framework Data Provider for MySQL",
            "MySql.Data.MySqlClient",
            typeof(MySqlClientFactory).AssemblyQualifiedName
        );

        // Register Entity Framework provider
        SetProviderServices("MySql.Data.MySqlClient", new MySqlProviderServices());
        SetDefaultConnectionFactory(new MySqlConnectionFactory());
    }
}

配置的第一部分是在运行时通过向 system.data 部分动态添加新配置条目来注册 ADO.NET 提供程序。这非常 hacky,但似乎可以正常工作。

将连接字符串添加到 config.json 而不是 Web.config:

{
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=localhost; Database=test; Uid=test; Pwd=password;"
    }
  }
}

修改 DbContext 以使用正确的配置和连接字符串:

[DbConfigurationType(typeof(MyDbConfiguration))]
public class MyContext : DbContext
{
    public MyContext(IConfiguration config)
      : base(config["Data:DefaultConnection:ConnectionString"])
      {
      }
      // ...
}

Startup.cs中的依赖注入容器中注册MyContext:

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddScoped<MyContext>();
}

然后您可以使用构造函数注入将 MyContext 放入您的控制器中。

我的博客 post http://dan.cx/2015/08/entity-framework-6-mysql-aspnet, and a sample project at https://github.com/Daniel15/EFExample

中有更多详细信息