Eftersom Web.config inte längre används med ASP.NET 5 måste du använda kodbaserad konfiguration för att konfigurera den istället. För att göra det, skapa en ny klass som ärver från 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());
}
}
Den första delen av konfigurationen är ett hack för att registrera ADO.NET-leverantören vid körning, genom att dynamiskt lägga till en ny konfigurationspost till system.data
sektion. Det här är väldigt hackigt, men verkar fungera korrekt.
Lägg till anslutningssträngen till config.json
istället för Web.config
:
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=localhost; Database=test; Uid=test; Pwd=password;"
}
}
}
Ändra DbContext
för att använda korrekt konfiguration och anslutningssträng:
[DbConfigurationType(typeof(MyDbConfiguration))]
public class MyContext : DbContext
{
public MyContext(IConfiguration config)
: base(config["Data:DefaultConnection:ConnectionString"])
{
}
// ...
}
Registrera MyContext
i beroendeinjektionsbehållaren i Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped<MyContext>();
}
Sedan kan du bara använda konstruktorinjektion för att få MyContext
i dina kontroller.
Mer information i mitt blogginlägg på http://dan.cx/ 2015/08/entity-framework-6-mysql-aspnet , och ett exempelprojekt på https://github.com/Daniel15/EFExample