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

时间:2020-06-15 11:54:22

标签: postgresql azure azure-devops azure-pipelines ef-core-3.1

在Azure DevOps中,我用于更新 SQL Server 数据库的方法是使用Entity Framework Core,它执行以下两项任务:

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

问题是,既然我使用的是 PostgreSQL 数据库,我找不到一种简单明了的方式来更新数据库。我已经看到another task for MySQL的功能与我的发布管道任务与SQL Server的功能完全相同,但对于PostgreSQL没有任何作用。

所以我认为我基本上可以在管道中执行dotnet ef update database(设置了正确的选项),但是我想知道是否真的有一种方法可以像以前一样平稳地更新数据库。 / p>

1 个答案:

答案 0 :(得分:2)

我终于要修复它。

我发现有两种解决方案可以解决此问题。

  1. 首先,所有支持实体框架迁移的数据库都有一个通用修补程序:
    • 使用 .NET Core 任务,我们将必须安装 dotnet ef工具: 该任务将如下所示:

Intalling dotnet ef tools

这就是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

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

注意,我已经添加了标记-no-build ,因为我已经在构建管道中构建了该项目以遵循良好的做法。


  1. 另一个选择(也是我最后使用的选择),一直使用this task,它基本上执行相同的过程,不同之处在于它使用已经编译的 .dll来实现文件,因此您不必复制整个项目就可以进行迁移。任务的设置,尽管您必须填写许多输入,但它非常简单,并且还应该与其他数据库一起使用。

但是,如果我必须使用 SQL Server MySQL ,我将使用迁移脚本,因为此过程要容易得多(您只需要生成一个 .sql 脚本,那么它是部署迁移所需的唯一文件)。