C# Azure devops在部署时在多个数据库上执行ef core(.Net core 3.0)迁移sql脚本(来自项目存储库)
我在C# Azure devops在部署时在多个数据库上执行ef core(.Net core 3.0)迁移sql脚本(来自项目存储库),c#,azure,asp.net-core,continuous-integration,azure-sql-database,C#,Azure,Asp.net Core,Continuous Integration,Azure Sql Database,我在Azure上有一个API应用程序,我首先在实体框架核心代码上构建API EF正在与3个不同的数据库进行对话 连接字符串存储在azure应用程序配置中 我正在我的应用程序中使用.Net Core 3.0 我有一个专门的类库来管理域和迁移 我有多个上下文,并且每个上下文都连接到Azure上的不同数据库 我将迁移脚本和数据库初始化脚本放在api应用程序项目中名为ReleaseScripts的文件夹下,如下所述: 如您所见,每个上下文/数据库脚本都放在一个特定的文件夹下:DA、DC、DP。还有一个
Azure
上有一个API应用程序
,我首先在实体框架核心代码
上构建API
EF正在与3个不同的数据库进行对话
连接字符串存储在azure应用程序配置中
我正在我的应用程序中使用.Net Core 3.0
我有一个专门的类库来管理域和迁移
我有多个上下文,并且每个上下文都连接到Azure上的不同数据库
我将迁移脚本和数据库初始化脚本放在api应用程序项目中名为ReleaseScripts
的文件夹下,如下所述:
如您所见,每个上下文/数据库脚本都放在一个特定的文件夹下:DA、DC、DP。还有一个用于种子或初始化脚本的公用文件夹
每个文件夹中的脚本都有编号(我可以指定执行顺序的方式)
我有两个环境(开发和生产azure资源组
),以及存储库develope
和master
中的两个主要分支
这是由构建删除触发的实际发布管道
完成任务
这也是我的管道代理配置:
最后,我希望在部署时执行存储库中ReleaseScripts
文件夹中的每个脚本(如果尚未执行)
我发现这是在谈论它,但不是在细节上
此外,我不太明白我该如何处理这个问题
关于如何做到这一点有什么想法吗
如果您有任何建议,我们将不胜感激。问题是,您只想在尚未执行的情况下执行每个脚本。这意味着您需要以某种方式保留SQL Server上已执行内容的状态—这将需要一个迁移表或类似的内容 因此,我建议将所有SQL脚本设为幂等,然后通过SQLCMD-
在Azure管道中,您应该能够使用Azure SQL数据库部署任务幂等元。。。说得好+尽管这只是解决我问题的一个办法。解决方案是创建另一个数据库,然后我编写了一个PowerShell脚本来跟踪和检查其中的执行情况(所有这些都是在自托管代理池中完成的)。。。