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

时间:2015-08-02 00:49:48

标签: mysql entity-framework entity-framework-6 asp.net-core

我有一个使用ASP.NET MVC 4,Entity Framework 6和MySQL的现有站点。我试图将其升级到ASP.NET 5,但是想要继续使用Entity Framework 6,因为Entity Framework缺少某些功能,但还不支持MySQL。如何在ASP.NET 5中使用EF6?

1 个答案:

答案 0 :(得分:2)

由于Web 5不再与ASP.NET 5一起使用,因此您需要使用code-based configuration来配置它。为此,请创建一个继承自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提供程序的hack。这非常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"])
      {
      }
      // ...
}

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

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

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

我在http://dan.cx/2015/08/entity-framework-6-mysql-aspnet的博客文章中的更多详情,以及https://github.com/Daniel15/EFExample的示例项目