带有自定义连接字符串的 EF 6 程序化迁移

EF 6 programmatic Migration with custom connection string

我有一个 EF6 代码优先实现,启用了迁移和一个初始迁移。我创建了一个方法来以编程方式 运行 如下所示的迁移:

public void RunMigration()
{
    var migrationConfiguration = new DataAccess.Migrations.Configuration();
    var migrator = new System.Data.Entity.Migrations.DbMigrator(migrationConfiguration);
    migrator.Update();
}

当我开始测试时,我在 App.config 中配置了几个连接字符串。我的问题:

如何告诉 DbMigrator 使用什么连接字符串?

更新: 我想 catch 是在不扩展 DbMigrator 的情况下执行此操作的。

因此,除非有人提出更好的答案:在 EF6 中,从 EF 6.1.3 开始,没有任何工作方式可以为程序化数据库迁移指定 运行time 连接字符串。我认为我唯一能看到的是我需要生成一个 sql 脚本并在数据库设置时以编程方式 运行 它。这个问题是我要么必须在文本中编译,要么用二进制文件部署它。

您似乎会将 migrationConfiguration.TargetDatabase 设置为 DbConnectionInfo

DbConnectionInfo 的构造函数之一采用连接字符串。 参见 MSDN

看起来实际使用它的最简单方法是修改您的 DataAccess.Migrations.Configuration class 以使用带有连接字符串的构造函数。

我用

var migrator = new DbMigrator(new DbMigrationsConfiguration { TargetDatabase = new DbConnectionInfo("MyConnectionStringHere")});
migrator.Update();

您可以设置 dbConnectionInfo:

migrationConfiguration.TargetDatabase = new DbConnectionInfo(connectionString);

完整代码:

public void RunMigration(string connectionString)
{
    var migrationConfiguration = new DataAccess.Migrations.Configuration();
migrationConfiguration.TargetDatabase = new DbConnectionInfo(connectionString);
    var migrator = new System.Data.Entity.Migrations.DbMigrator(migrationConfiguration);
    migrator.Update();
}

重要!:你没有在 dbContext 初始值设定项中设置连接名称,这很糟糕。