Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure devops在部署时在多个数据库上执行ef core(.Net core 3.0)迁移sql脚本(来自项目存储库)_C#_Azure_Asp.net Core_Continuous Integration_Azure Sql Database - Fatal编程技术网

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脚本来跟踪和检查其中的执行情况(所有这些都是在自托管代理池中完成的)。。。