Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Dois provedores diferentes no mesmo arquivo de configuração


Em primeiro lugar, você está usando as classes de configuração erradas. O DbConfigurationType precisa de um tipo herdado de DbConfiguration e não DbMigrationsConfiguration<>.

O DbMigrationsConfiguration é realmente usado apenas para 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

Infelizmente, não é possível definir vários DefaultConnectionFactories mesmo com vários DbConfigurations.

No seu caso você terá que armazenar as strings de conexão no app.config e passar o nome para o construtor DbContext.
public class TestContext : DbContext
    {
        public TestContext()
            : base("name=MyConnectionString")
        {

        }

A conexão será inicializada com base no nome do provedor para MyConnectionString no app.config

Ou se você não quiser a string de conexão em seu app.config apenas passe um DbConnection já inicializado para o construtor DbContext
public class TestContext : DbContext
    {
        public TestContext()
            : base(new SqlCeConnection(GetConnectionString()),true)
        {

        }

Ou se você não quiser inicializar uma conexão específica use o 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;
        }