sql >> Base de Datos >  >> RDS >> Mysql

Dos proveedores diferentes en el mismo archivo de configuración

En primer lugar, está utilizando las clases de configuración incorrectas. DbConfigurationType necesita un tipo heredado de DbConfiguration, no de DbMigrationsConfiguration<>.

DbMigrationsConfiguration realmente solo se usa para Migrators y 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

Lamentablemente, no es posible, así que establezca varias fábricas de conexiones predeterminadas incluso con varias configuraciones de bases de datos.

En su caso, deberá almacenar las cadenas de conexión en app.config y pasar el nombre al constructor DbContext.

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

        }

La conexión se inicializará según el nombre del proveedor para MyConnectionString en app.config

O si no desea la cadena de conexión en su app.config, simplemente pase una DbConnection ya inicializada al constructor DbContext

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

        }

O si no desea inicializar una conexión específica, use 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;
        }