如何在 ASP.NET 5 中将 Entity Framework 6 与 MySQL 一起使用?

Posted

技术标签:

【中文标题】如何在 ASP.NET 5 中将 Entity Framework 6 与 MySQL 一起使用?【英文标题】:How do I use Entity Framework 6 with MySQL in ASP.NET 5? 【发布时间】:2015-10-24 09:34:55 【问题描述】:

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

【问题讨论】:

【参考方案1】:

由于 ASP.NET 5 不再使用 Web.config,因此您需要使用 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 提供程序的技巧。这很 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 获取到您的控制器中。

更多详细信息请参见我的博文http://dan.cx/2015/08/entity-framework-6-mysql-aspnet,以及示例项目https://github.com/Daniel15/EFExample

【讨论】:

以上是关于如何在 ASP.NET 5 中将 Entity Framework 6 与 MySQL 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Entity Framework ASP.Net MVC 5 删除多条记录? [关闭]

如何在 Asp.Net Core Mvc 5.0 中将 sql 数据库与 ado.net 连接?

如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由

Asp.NET MVC 5 Entity Framework 中的对象名称“dbo.AspNetUsers”无效

Entity Framework Core 5.0 如何将多对多连接的 LINQ 转换为使用 ASP.NET 成员资格的交集表

浅谈最新beta版ASP.NET 5架构Entity Framework 7预览版