На първо място, вие използвате грешни конфигурационни класове. DbConfigurationType се нуждае от тип, наследен от DbConfiguration, а не от DbMigrationsConfiguration<>.
DbMigrationsConfiguration наистина се използва само за миграторите и инициализаторите на база данни.
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
За съжаление това не е възможно, така че задайте няколко DefaultConnectionFactory дори с множество DbConfigurations.
Във вашия случай ще трябва да съхраните низовете за връзка в app.config и да предадете името на конструктора DbContext.
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
Връзката ще бъде инициализирана въз основа на името на доставчика за MyConnectionString в app.config
Или ако не искате низът за връзка във вашия app.config, просто предайте вече инициализирана DbConnection към конструктора DbContext
public class TestContext : DbContext
{
public TestContext()
: base(new SqlCeConnection(GetConnectionString()),true)
{
}
Или ако не искате да инициализирате конкретна връзка, използвайте 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;
}