如何在 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
中有更多详细信息
我有一个使用 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
中有更多详细信息