Tout d'abord, vous utilisez les mauvaises classes de configuration. Le DbConfigurationType a besoin d'un type hérité de DbConfiguration et non de DbMigrationsConfiguration<>.
Le DbMigrationsConfiguration est vraiment utilisé pour les Migrators et 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
Malheureusement, ce n'est pas possible, alors définissez plusieurs DefaultConnectionFactories même avec plusieurs DbConfigurations.
Dans votre cas, vous devrez stocker les chaînes de connexion dans le app.config et transmettre le nom au constructeur DbContext.
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
La connexion sera initialisée en fonction du nom du fournisseur pour MyConnectionString dans app.config
Ou si vous ne voulez pas la chaîne de connexion dans votre app.config, passez simplement une DbConnection déjà initialisée au constructeur DbContext
public class TestContext : DbContext
{
public TestContext()
: base(new SqlCeConnection(GetConnectionString()),true)
{
}
Ou si vous ne souhaitez pas initialiser une connexion spécifique, utilisez 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;
}