Mysql
 sql >> Database >  >> RDS >> Mysql

Come si usa Entity Framework 6 con MySQL in ASP.NET 5?

Poiché Web.config non è più utilizzato con ASP.NET 5, è necessario utilizzare configurazione basata su codice per configurarlo invece. Per fare ciò, crea una nuova classe che erediti 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 hack per registrare il provider ADO.NET in fase di esecuzione, aggiungendo dinamicamente una nuova voce di configurazione a system.data sezione. Questo è molto complicato, ma sembra funzionare correttamente.

Aggiungi la stringa di connessione a config.json anziché Web.config :

{
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=localhost; Database=test; Uid=test; Pwd=password;"
    }
  }
}

Modifica il 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"])
      {
      }
      // ...
}

Registrati MyContext nel contenitore di inserimento delle dipendenze in Startup.cs :

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

Quindi puoi semplicemente usare l'iniezione del costruttore per ottenere MyContext nei tuoi controller.

Maggiori dettagli nel mio post sul blog su http://dan.cx/ 2015/08/entity-framework-6-mysql-aspnet e un progetto di esempio su https://github.com/Daniel15/EFExample