通过 Azure DevOps 中的 EFCore 迁移更新 postgreSQL 数据库

Updating postgreSQL DB through EFCore migrations in Azure DevOps

在 Azure DevOps 中,我用来更新 SQL 服务器 数据库的方法是使用 Entity Framework 核心,使用两个任务:

  1. 在我的构建管道中:This task 使用我的数据库生成了一个 sql 脚本 迁移。
  2. 在发布管道中:This task 使用此脚本更新数据库。

问题是,现在我正在使用 PostgreSQL 数据库,我找不到一种简单干净的方法来更新数据库同样的方式。我已经看到 another task for MySQL 与我的发布管道任务对 SQL 服务器所做的完全相同,但对 PostgreSQL.

没有任何作用

所以我想我基本上可以在管道中执行 dotnet ef update database(设置适当的选项),但我想知道是否真的有办法像我以前那样以平稳的方式继续更新数据库.

我终于修好了。

我找到了两种解决方法来解决这个问题。

  1. 首先,所有支持 Entity Framework 迁移的数据库都有一个通用修复程序
    • 使用 .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'
  • 一旦我们安装了所需的工具,使用 CMDBash 任务,我们将拥有执行这样的脚本:
dotnet ef database update -c <DBCONTEXT> -p <PROJECT> -s <STARTUP_PROJECT> -v --no-build

您只需添加标志 -c 以防您的项目中有多个上下文(有时其他 DbContext 可能来自某些块包)。

注意我添加了标志 --no-build 因为我已经在构建管道中构建项目以遵循良好实践。


  1. 另一个选项(也是我最终使用的那个),它是使用 this task 基本上执行相同的过程,不同之处在于它是通过使用你已经编译的 .dll 文件,因此您不必复制整个项目即可使迁移工作。任务的设置,虽然你必须填写很多输入,但它非常简单,而且它应该也可以与其他数据库一起使用。

但是,如果我必须使用 SQL ServerMySQL 我会使用迁移脚本,因为这个过程要容易得多(你只需要生成一个 .sql 脚本,然后它是部署迁移所需的唯一文件)。