Erstens verwenden Sie die falschen Konfigurationsklassen. Der DbConfigurationType benötigt einen Typ, der von DbConfiguration geerbt wird, nicht von DbMigrationsConfiguration<>.
Die DbMigrationsConfiguration wird wirklich nur für die Migrators und DatabaseInitializers verwendet.
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
Leider ist es nicht möglich, mehrere DefaultConnectionFactories zu setzen, auch nicht mit mehreren DbConfigurations.
In Ihrem Fall müssen Sie die Verbindungszeichenfolgen in der app.config speichern und den Namen an den DbContext-Konstruktor übergeben.
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
Die Verbindung wird basierend auf dem Anbieternamen für MyConnectionString in der app.config
initialisiertOder wenn Sie die Verbindungszeichenfolge nicht in Ihrer app.config haben möchten, übergeben Sie einfach eine bereits initialisierte DbConnection an den DbContext-Konstruktor
public class TestContext : DbContext
{
public TestContext()
: base(new SqlCeConnection(GetConnectionString()),true)
{
}
Oder wenn Sie keine bestimmte Verbindung initialisieren möchten, verwenden Sie die 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;
}