我有一个代码,第一次迁移以下代码:内访问该数据库名DbMigration
public partial class RunSQLInit : DbMigration
{
public override void Up()
{
this.Sql(SqlFiles.Create_Job_ClearExpiredData);
}
[...]
}
其中SqlFiles.Create_Job_ClearExpiredData
是RESX文件返回一个SQL文件作为一个字符串。 SQL在SQL Server中创建和调度服务器代理作业。
现在,SQL有两个“变量”,我需要在数据库上运行迁移之前进行更改的能力:作业应该运行的数据库的名称以及实际作业的名称。如果我只有一个环境,那就没问题了,但是我将这个代码优先的项目部署到许多不同的数据库名称和我应该称之为Job的环境中。
我看到三种可能性:
目前正在向上()内使用的连接字符串的- 弄个 - 方法,并用它来解析出数据库的名称和做它替换到SQL运行它之前的字符串。但我将如何去获取“正在使用的连接字符串”?
- 在程序包管理器控制台中运行
Update-Database
时,可能会在迁移内部访问某种方式将变量传递给迁移。我会怎么做呢? - 使用另一种解决方案来创建作业。我们在很大程度上依赖于容易地从代码优先模型的所有环境中部署的,所以应该以某种方式很容易实现自动化,无需额外劳动更新数据库时,以及生产部署脚本(与
Update-Database -script
)
一小截出从这个SQL脚本是这样的:
EXEC msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Run SP',
@step_id=1,
@subsystem=N'TSQL',
@command=N'exec sp_ClearExpiredData;',
@[email protected], --This is where I need the varying database name!
@flags=0
问题是我需要更改名称,具体取决于我部署到的数据库。 AppSetting会为整个应用程序设置名称,而不管我将其部署到什么位置。 – cederlof
选项1不起作用,因为我无法访问Up方法中的“当前运行”连接字符串。这是我的问题。 – cederlof
+1连接字符串解析器 – cederlof