Ho un sito esistente che utilizza ASP.NET MVC 4, Entity Framework 6 e MySQL. Sto cercando di aggiornarlo ad ASP.NET 5, ma voglio continuare ad usare Entity Framework 6 dato che Entity Framework manca alcune funzionalità e non supporta ancora MySQL. Come utilizzare EF6 in ASP.NET 5?
Poiché Web.config non è più utilizzato con ASP.NET 5, è necessario utilizzare la configurazione basata su codice per configurarlo. Per fare ciò, crea una nuova classe che eredita da 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());
}
}
La prima parte della configurazione è un trucco per registrare il provider ADO.NET in fase di runtime, aggiungendo dinamicamente una nuova voce di configurazione alla sezione system.data
. Questo è molto hacky, ma sembra funzionare correttamente.
Aggiungi la stringa di connessione a config.json
piuttosto che a Web.config
:
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=localhost; Database=test; Uid=test; Pwd=password;"
}
}
}
Modificare DbContext
per utilizzare la configurazione e la stringa di connessione corrette:
[DbConfigurationType(typeof(MyDbConfiguration))]
public class MyContext : DbContext
{
public MyContext(IConfiguration config)
: base(config["Data:DefaultConnection:ConnectionString"])
{
}
// ...
}
Registrare MyContext
nel contenitore di iniezione delle dipendenze in Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped<MyContext>();
}
Quindi puoi semplicemente usare il constructor injection per ottenere MyContext
nei tuoi controller.
Maggiori dettagli nel mio post sul blog http://dan.cx/2015/08/entity-framework-6-mysql-aspnet e un progetto di esempio su https://github.com/Daniel15/EFExample