gpt4 book ai didi

sql - CodeFirst 迁移 : How to run a database script (C# or SQL) after completion of "update-database" automatically?

转载 作者:行者123 更新时间:2023-12-02 16:34:41 25 4
gpt4 key购买 nike

我正在使用 EF.Core 和代码优先迁移来更新 SQL 数据库。

每当我添加迁移(包管理器控制台:add-migration)时,我都会使用众所周知的 update-database 命令更新数据库。有没有办法在完成此命令后自动运行 SQL 批处理脚本(就像您可以在 Visual Studio 中处理构建后事件一样)?

该脚本可以备份数据库或执行其他任务(如设置用户角色等)。

我不想修改现有的迁移来执行此操作,我知道您可以添加类似的内容

   protected override void Up(MigrationBuilder migrationBuilder)
{
var sqlFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
@"Migrations\20200701103006_MySQLBatch_Up.sql");
var sqlCommands = System.IO.File.ReadAllText(sqlFile);
migrationBuilder.Sql(sqlCommands);

// ...
}

但我不想这样做,因为这样您就必须每次添加新迁移时都这样做。

是否有可以覆盖的事件或方法来实现它?或者可以触发的东西,比如脚本?

实际上,我想要实现的是有一个脚本或方法调用:

update-database
pg_dump -h localhost -U postgres -p 5432 myDatabase > C:\Temp\myDatabase.sql

注意 update-database 在包管理器上下文中运行,pg_dump 在命令 shell (cmd.exe) 中运行 - 因此,您不能在 .cmd 或 .bat 脚本中运行 update-database直接。

最佳答案

我能想到的两个方案

  1. 更简单:为什么不用一个简单的批处理文件按顺序执行这两个命令,然后您可以运行批处理文件而不是 Update-Database 命令?您甚至可以从标准项目配置文件中获取最多的参数,这样您就可以在多个项目中使用相同的脚本,而无需更改项目配置文件以外的任何内容。通过这种方式,您可以确保您的其他脚本在实际需要时响应 Update-Database 命令运行

  2. 如果这是针对可能以动态方式涉及多个“更新命令”的 Powershell session ,并且您不想使用上述方法,那么您可以尝试订阅 Powershell 引擎 Exiting 事件(即 [System.Management.Automation.PsEngineEvent]::Exiting)并随时通过其 -Action 参数自动执行脚本作为响应 Update-执行数据库(但前提是在同一 Powershell session 中)。

有关详细信息和示例,请参阅Register-EngineEvent 命令

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/register-engineevent?view=powershell-7

在您的操作脚本中,您可以获得事件详细信息(如 $Events[0].MessageData)并搜索文本 "Database-Update",然后执行您想要的命令作为响应。如果 "Database-Update " 文本出现在 session 中的任何意外上下文中,这可能会出错。

您可以在此处查看 Get-Event 命令的详细信息和示例

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-event?view=powershell-7

您可以通过 New-PSSession session 命令与本地或远程计算机建立持久 session ,以便事件订阅者可以考虑在多个文件中执行的命令。

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/new-pssession?view=powershell-7

更多关于不同类型的 Powershell session

https://www.sconstantinou.com/windows-powershell-sessions-pssessions/

关于sql - CodeFirst 迁移 : How to run a database script (C# or SQL) after completion of "update-database" automatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62872602/

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