EF 迁移:创建 DbContext 实例
EF migrations: creating DbContext instance
是否可以"tell" 迁移如何创建 MyDbContext 实例?默认情况下,它使用 public 无参数构造函数并在 AppConfig 中搜索与 MyDbContext class 相同的连接字符串。我能以某种方式告诉配置迁移使用一些工厂方法来创建 MyDbContext 实例,它将用于迁移吗?
我不知道如何使用 DbContext 的无参数构造函数进行迁移,但我会使用我的配置 class 和我的 Initializer 来注入一些连接字符串。或许能帮到你。
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));
}
您可以创建一个 class 来实现 IDbContextFactory<MyDbContext>
接口并包含用于创建 MyDbContext
实例的自定义代码。
设计时工具和迁移工具将自动发现此 class(如果它与您的 DbContext
位于同一程序集中)并将使用它来初始化 MyDbContext
.
public class MigrationsContextFactory : IDbContextFactory<MyDbContext> {
public MyDbContext Create() {
return new MyDbContext(connectionString, someOtherSettings);
}
}
是否可以"tell" 迁移如何创建 MyDbContext 实例?默认情况下,它使用 public 无参数构造函数并在 AppConfig 中搜索与 MyDbContext class 相同的连接字符串。我能以某种方式告诉配置迁移使用一些工厂方法来创建 MyDbContext 实例,它将用于迁移吗?
我不知道如何使用 DbContext 的无参数构造函数进行迁移,但我会使用我的配置 class 和我的 Initializer 来注入一些连接字符串。或许能帮到你。
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));
}
您可以创建一个 class 来实现 IDbContextFactory<MyDbContext>
接口并包含用于创建 MyDbContext
实例的自定义代码。
设计时工具和迁移工具将自动发现此 class(如果它与您的 DbContext
位于同一程序集中)并将使用它来初始化 MyDbContext
.
public class MigrationsContextFactory : IDbContextFactory<MyDbContext> {
public MyDbContext Create() {
return new MyDbContext(connectionString, someOtherSettings);
}
}