postgresql - 通过 Azure DevOps 中的 EFCore 迁移更新 postgreSQL DB
问题描述
在 Azure DevOps 中,我用来更新SQL Server数据库的方式是使用 Entity Framework Core,使用两个任务:
问题是,现在我使用的是PostgreSQL数据库,我找不到一种简单而干净的方法来以同样的方式更新数据库。我已经看到MySQL 的另一个任务与我的发布管道任务对 SQL Server 所做的完全相同,但对 PostgreSQL 没有。
所以我认为我基本上可以dotnet ef update database
在管道中执行(使用适当的选项集),但我想知道是否真的有一种方法可以像以前那样以平稳的方式持续更新数据库。
解决方案
我终于修好了。
我发现有两种解决方案可以解决这个问题。
- 首先,所有支持Entity Framework Migrations的数据库都有一个通用修复:
- 使用.NET Core任务,我们必须安装dotnet ef 工具:该任务如下所示:
这将是 YAML(如果您想在发布管道之外使用它):
- task: DotNetCoreCLI@2
displayName: 'dotnet custom'
inputs:
command: custom
custom: tool
arguments: 'install --global dotnet-ef --version 3.1.4 --ignore-failed-sources'
- 一旦我们安装了所需的工具,使用CMD或Bash任务,我们将不得不执行如下脚本:
dotnet ef database update -c <DBCONTEXT> -p <PROJECT> -s <STARTUP_PROJECT> -v --no-build
您只需要添加标志-c以防您的项目中有多个上下文(有时其他 DbContexts 可能来自一些 nugget 包)。
请注意,我添加了--no-build标志,因为我已经在构建管道中构建了项目以遵循良好实践。
- 另一种选择(也是我最终使用的那个)是使用这个基本上执行相同过程的任务,不同之处在于它使用您已经编译的.dll文件来完成它,因此您不必复制使迁移工作的整个项目。任务的设置,虽然您必须填写许多输入,但它非常简单,并且它应该也可以与其他数据库一起使用。
但是,如果我必须使用SQL Server或MySQL,我会使用迁移脚本,因为该过程要容易得多(您只需要生成一个.sql脚本,然后它是部署迁移所需的唯一文件)。
推荐阅读
- zend-framework3 - 如何在 ZF3 中初始化模块(用户)?
- vba - 如何在 Visio 中为批量“适合绘图”操作编写宏?
- android - 两个生产者一个表面
- xml - 为小部件 Magento2 插入新容器选项
- vue.js - 对 Vee-Validate 使用 v-model 而不是 name 属性
- javascript - 通过 cy.request 在 mailcatcher 中获取电子邮件
- facebook - Facebook分享更改域名
- ios - iOS - iPhone 应用程序无法放大以适应 iPad 屏幕
- html - 如何从跨度标签中抓取在线数据
- c# - “如何修复 webhook 接收器的 hasura 中的‘发生错误’错误”