带有自定义连接字符串的 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 初始值设定项中设置连接名称,这很糟糕。
我有一个 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 初始值设定项中设置连接名称,这很糟糕。