Pertama-tama Anda menggunakan kelas konfigurasi yang salah. DbConfigurationType membutuhkan tipe yang diwarisi dari DbConfiguration bukan DbMigrationsConfiguration<>.
DbMigrationsConfiguration benar-benar hanya digunakan untuk Migrators dan 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
Sayangnya itu tidak mungkin, jadi atur beberapa DefaultConnectionFactories bahkan dengan beberapa DbConfigurations.
Dalam kasus Anda, Anda harus menyimpan string koneksi di app.config dan meneruskan nama tersebut ke konstruktor DbContext.
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
Koneksi akan diinisialisasi berdasarkan nama penyedia untuk MyConnectionString di app.config
Atau jika Anda tidak ingin string koneksi di app.config Anda, cukup berikan DbConnection yang sudah diinisialisasi ke konstruktor DbContext
public class TestContext : DbContext
{
public TestContext()
: base(new SqlCeConnection(GetConnectionString()),true)
{
}
Atau jika Anda tidak ingin menginisialisasi Koneksi tertentu, gunakan 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;
}