我在代码优先迁移中有以下代码:
public partial class RunSQLInit : DbMigration
{
public override void Up()
{
this.Sql(SqlFiles.Create_Job_ClearExpiredData);
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
哪里SqlFiles.Create_Job_ClearExpiredData
是一个以字符串形式返回 SQL 文件的 resx 文件。SQL 在 SQL Server 中创建和调度服务器代理作业。
现在,SQL 有两个“变量”,我需要在对数据库运行迁移之前进行更改:作业应该运行的数据库的名称,以及实际作业的名称。如果我只有一个环境,那会很好,但是我将这个代码优先项目部署到多个环境中,这些环境在数据库名称和我应该称之为 Job 的内容上有所不同。
我看到了三种可能性:
Update-Database
在包管理器控制台中运行时,以某种方式将变量传递给迁移,该变量可以在迁移内部访问。我该怎么做?Update-Database -script
)有问题的 SQL 脚本的一小部分是这样的:
EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run SP',
@step_id=1,
@subsystem=N'TSQL',
@command=N'exec sp_ClearExpiredData;',
@database_name=@databaseName, --This is where I need the varying database name!
@flags=0
Run Code Online (Sandbox Code Playgroud) 当您应用任何命令时
EF使用主要web.config中的连接字符串
即使您已使用xml转换配置了web.debug.config和web.release.config
这意味着,我必须冒险冒险忘记web.config
在发布之前更改我的真实身份。