まず、間違った構成クラスを使用しています。 DbConfigurationTypeには、DbMigrationsConfiguration<>ではなくDbConfigurationから継承されたタイプが必要です。
DbMigrationsConfigurationは、実際にはMigratorsと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
残念ながら、それは不可能なので、複数のDbConfigurationsを使用しても複数のDefaultConnectionFactoriesを設定します。
あなたの場合、接続文字列をapp.configに保存し、その名前をDbContextコンストラクターに渡す必要があります。
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
接続は、app.config
のMyConnectionStringのプロバイダー名に基づいて初期化されます。または、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;
}