是否有可能告诉"迁移如何创建MyDbContext实例?默认情况下,它使用公共无参数构造函数,并在AppConfig中搜索与MyDbContext类相同的连接字符串。我能以某种方式告诉配置迁移使用一些工厂方法创建MyDbContext实例,它将用于迁移吗?
答案 0 :(得分:2)
我不知道如何使迁移使用DbContext的无参数构造函数,但我会使用我的配置类和我的初始化程序来注入一些连接字符串。也许它可以帮助你。
public class MyDbInitializer : IDatabaseInitializer<MyDbContext>
{
private readonly DbMigrationsConfiguration _configuration;
public MyDbInitializer(string connection)
{
_configuration = new Configuration(connection);
}
public void InitializeDatabase(MyDbContext context)
{
if (!context.Database.Exists())
{
context.Database.Create();
}
else
{
var migrator = new DbMigrator(_configuration);
if (migrator.GetPendingMigrations().Any())
migrator.Update();
}
}
}
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
public Configuration(string connectionString)
{
this.TargetDatabase = new System.Data.Entity.Infrastructure.DbConnectionInfo(connectionString);
AutomaticMigrationsEnabled = true;
ContextKey = "MyProj.Models.MyDbContext";
}
}
public MyDbContext()
{
}
public MyDbContext(string connection)
{
Database.SetInitializer(new MyDbInitializer(connection));
}
答案 1 :(得分:2)
您可以创建一个实现IDbContextFactory<MyDbContext>
接口的类,该类包含用于创建MyDbContext
实例的自定义代码。
设计时工具以及迁移工具会自动发现此类(如果它与您的DbContext
放在同一个程序集中),并将使用它来初始化MyDbContext
。
public class MigrationsContextFactory : IDbContextFactory<MyDbContext> {
public MyDbContext Create() {
return new MyDbContext(connectionString, someOtherSettings);
}
}
请参阅documentation以供参考。