相关疑难解决方法(0)

在 DbMigration 中访问 Up 里面的数据库名

我在代码优先迁移中有以下代码:

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 的内容上有所不同。

我看到了三种可能性:

  1. 获取当前在 Up() 方法中使用的连接字符串,并使用它来解析数据库名称并在运行之前将其替换为 SQL 字符串。但是我将如何获取“当前正在使用的连接字符串”?
  2. Update-Database在包管理器控制台中运行时,以某种方式将变量传递给迁移,该变量可以在迁移内部访问。我该怎么做?
  3. 使用另一种解决方案来创建作业。我们在很大程度上依赖于从代码优先模型部署到所有环境的便利性,因此在更新数据库和生成部署脚本(使用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)

.net sql sql-server entity-framework ef-code-first

5
推荐指数
1
解决办法
2707
查看次数

如何使实体框架迁移使用web.config转换?

当您应用任何命令时

  • '更新数据库'
  • “添加迁移”

EF使用主要web.config中的连接字符串

即使您已使用xml转换配置了web.debug.config和web.release.config

这意味着,我必须冒险冒险忘记web.config在发布之前更改我的真实身份。

entity-framework web-config web.config-transform

5
推荐指数
1
解决办法
1500
查看次数