gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:07:48 25 4
gpt4 key购买 nike

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

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

我看到了三种可能性:
  • 获取当前在 Up() 方法中使用的连接字符串,并使用它来解析数据库名称并在运行之前将其替换为 SQL 字符串。但是我将如何获取“当前正在使用的连接字符串”?
  • 在运行 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

    最佳答案

    我的问题的答案是简单地在 SQL 文件中使用它:

    set @databaseName = db_name()

    由于当前上下文已经是我将用于工作的数据库,它已经存在。太容易了。

    关于.net - 在 DbMigration 中访问 Up 里面的数据库名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20118141/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com