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