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;
}