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

Due diversi provider sullo stesso file di configurazione

Prima di tutto stai usando le classi di configurazione sbagliate. DbConfigurationType necessita di un tipo ereditato da DbConfiguration non DbMigrationsConfiguration<>.

DbMigrationsConfiguration è in realtà usato solo per Migrators e DatabaseInitializers.

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        this.SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"));

        this.SetProviderServices("System.Data.SqlServerCe.4.0", SqlCeProviderServices.Instance);

        this.AddInterceptor(new NLogCommandInterceptor());// guardar logs

        this.SetMigrationSqlGenerator("System.Data.SqlServerCe.4.0", () => new SqlCeMigrationSqlGenerator());
    }
}

[DbConfigurationType(typeof(MyDbConfiguration))]
public class TestContext : DbContext

Purtroppo non è possibile, quindi imposta più DefaultConnectionFactory anche con più DbConfigurations.

Nel tuo caso dovrai memorizzare le stringhe di connessione in app.config e passare il nome al costruttore DbContext.

public class TestContext : DbContext
    {
        public TestContext()
            : base("name=MyConnectionString")
        {

        }

La connessione verrà inizializzata in base al nome del provider per MyConnectionString in app.config

Oppure, se non vuoi la stringa di connessione nel tuo app.config, passa semplicemente un DbConnection già inizializzato al costruttore DbContext

public class TestContext : DbContext
    {
        public TestContext()
            : base(new SqlCeConnection(GetConnectionString()),true)
        {

        }

Oppure, se non vuoi inizializzare una connessione specifica, usa DbProviderFactory.

public class TestContext : DbContext
    {
        public TestContext()
            : base(GetConnection(),true)
        {

        }

        public static DbConnection GetConnection() { 
            var factory = DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0");
            var connection = factory.CreateConnection();
            connection.ConnectionString = "Data Source=C:/teste2.sdf;Persist Security Info=False;";
            return connection;
        }