Trước hết, bạn đang sử dụng các lớp cấu hình sai. DbConfigurationType cần một kiểu kế thừa từ DbConfiguration chứ không phải DbMigrationsConfiguration <>.
DbMigrationsConfiguration thực sự chỉ được sử dụng cho Migrator và 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
Đáng tiếc là không thể đặt nhiều DefaultConnectionFactories ngay cả với nhiều DbConfigurations.
Trong trường hợp của bạn, bạn sẽ phải lưu trữ các chuỗi kết nối trong app.config và chuyển tên cho hàm tạo DbContext.
public class TestContext : DbContext
{
public TestContext()
: base("name=MyConnectionString")
{
}
Kết nối sẽ được khởi tạo dựa trên tên nhà cung cấp cho MyConnectionString trong app.config
Hoặc nếu bạn không muốn chuỗi kết nối trong app.config của mình, chỉ cần chuyển một DbConnection đã được khởi tạo đến phương thức khởi tạo DbContext
public class TestContext : DbContext
{
public TestContext()
: base(new SqlCeConnection(GetConnectionString()),true)
{
}
Hoặc nếu bạn không muốn khởi tạo một Kết nối cụ thể, hãy sử dụng 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;
}