c# - Azure devops 在多个数据库上部署时执行 ef core (.Net core 3.0) 迁移 sql 脚本(来自项目存储库)
问题描述
我有一个API APP
在Azure
其中构建 api 的entity framework core code first
.
EF 正在与3 个不同的数据库通信
连接字符串存储在azure app configuration
.
我.Net Core 3.0
在我的应用程序中使用
我有一个专门用于管理域和迁移的类库。
我有多个上下文,每个上下文都插入到 Azure 上的不同数据库。
我将迁移脚本和数据库初始化脚本放在 api 应用程序项目中的一个文件夹下,ReleaseScripts
如下所述:
如您所见,每个上下文/数据库脚本都放在一个特定的文件夹下:DA、DC、DP。并且有一个用于种子或初始化脚本的通用文件夹。
每个文件夹中的脚本都有编号(我可以指定执行顺序的方式)。
我有 2 个环境(开发和生产azure resource groups
)以及存储库Develop
和master
.
这是构建删除触发的我的实际发布管道
并遵循任务。
这也是我的管道代理配置:
最后,我想在部署时执行我的存储库中文件夹中的每个脚本(如果尚未执行)。ReleaseScripts
我发现这个Microsoft 链接 在谈论它,但没有详细说明。
此外,我不太明白我应该如何解决这个问题。
关于如何做到这一点的任何想法?
任何建议将不胜感激
解决方案
问题是您只想在尚未执行的情况下执行每个脚本。这意味着您需要以某种方式保留已在 SQL Server 上执行的内容的状态 - 这将需要迁移表或类似的东西。
因此,我建议将所有 SQL 脚本设为幂等,然后通过 SQLCMD 执行它们 - https://docs.microsoft.com/en-us/sql/ssms/scripting/sqlcmd-run-transact-sql-script-files?视图=sql-server-ver15
在 Azure Pipelines 中,您应该能够使用Azure SQL 数据库部署任务 https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/sql-azure-dacpac-deployment?view=azure-开发运维
推荐阅读
- javascript - 在不使用 id 选择器的情况下切换多个 MaterializeCSS 图标
- python - 如何有效地从一个非常大的列表中缩短列表?
- php - 如何使用 php mysqli 创建下载文件计数
- python - 使用 ROS 订阅者节点在 PyBullet 中移动球体
- php - 如何通过 ajax 调用从 jquery php 的下拉列表中选择特定选项来获取多个数据?
- xamarin.forms - Android.Net.Uri 中不存在解析
- react-i18next - 如何将可迭代的 React.Component 传递给 react-i18next Trans 组件?
- reactjs - 如何在onClick上获取li值并动态显示
- javascript - 如何使用 Jquery Mask Plugin 处理现有的双精度值
- ajax - 点击按钮时赛普拉斯抛出 cypress.io chrome-error://chromewebdata/ 错误