在Azure DevOps中,我用来更新的方式SQL服务器数据库使用 Entity Framework Core,使用两个任务:
- 在我的构建管道中:这个任务 https://github.com/pekspro/EF-Migrations-Script-Generator-Task用我的数据库生成了一个sql脚本
迁徙。
- 在发布管道中:这个任务 https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/SqlDacpacDeploymentOnMachineGroupV0/README.md使用此脚本更新数据库。
问题是,现在我正在使用PostgreSQL数据库,我找不到一种简单而干净的方法来以相同的方式更新数据库。我见过有MySQL 的另一个任务 https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/MysqlDeploymentOnMachineGroupV1/README.md这与我的发布管道任务对 SQL Server 所做的完全相同,但对 PostgreSQL 没有任何作用。
所以我想我基本上可以执行dotnet ef update database
(设置了正确的选项)在管道中,但我想知道是否真的有一种方法可以像我以前那样顺利地更新数据库。
我终于得修好它了。
我发现有两种解决方案可以解决该问题。
- First, there's a common fix for all the databases that support Entity Framework Migrations:
- Using a .NET核心任务,我们必须安装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 or a Bash任务,我们必须执行这样的脚本:
dotnet ef database update -c <DBCONTEXT> -p <PROJECT> -s <STARTUP_PROJECT> -v --no-build
你只需要添加标志-c如果您的项目中有多个上下文(有时其他 DbContext 可能来自一些块包)。
注意我添加了标志--无构建因为我已经在构建管道中构建了该项目以遵循良好实践。
- 另一种选择(也是我最终使用的),它是使用这个任务 https://marketplace.visualstudio.com/items?itemName=bendayconsulting.build-task基本上执行相同的过程,不同之处在于它是通过使用已经编译的.dll文件,因此您不必复制整个项目即可进行迁移。任务的设置,虽然您必须填写许多输入,但它非常简单,并且它应该也可以与其他数据库一起使用。
但是,如果我必须使用SQL服务器 or MySQL我会使用迁移脚本,因为这个过程要容易得多(您只需要生成一个.sql脚本,然后它是部署迁移所需的唯一文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)