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

在Azure DevOps中通过EFCore迁移更新postgreSQL数据库,postgresql,azure,azure-devops,azure-pipelines,ef-core-3.1,Postgresql,Azure,Azure Devops,Azure Pipelines,Ef Core 3.1,在Azure DevOps中,我用于更新SQL Server数据库的方式是使用Entity Framework Core,使用两个任务: 在我的构建管道中:使用我的数据库生成sql脚本 迁移。 在发布管道中: 使用此脚本更新数据库。 问题是,现在我使用的是PostgreSQL数据库,我找不到一种简单、干净的方法来以同样的方式更新数据库。我看到有一个与我的发布管道任务在SQL Server上所做的完全相同,但在PostgreSQL上却没有 因此,我认为我基本上可以使用管道中设置的适当选项执行dot

在Azure DevOps中,我用于更新SQL Server数据库的方式是使用Entity Framework Core,使用两个任务:

在我的构建管道中:使用我的数据库生成sql脚本 迁移。 在发布管道中: 使用此脚本更新数据库。 问题是,现在我使用的是PostgreSQL数据库,我找不到一种简单、干净的方法来以同样的方式更新数据库。我看到有一个与我的发布管道任务在SQL Server上所做的完全相同,但在PostgreSQL上却没有


因此,我认为我基本上可以使用管道中设置的适当选项执行dotnet ef update database,但我想知道是否有一种方法可以像以前一样以平稳的方式更新数据库。

我终于解决了它

我发现有两种解决方案可以解决这个问题

首先,支持实体框架迁移的所有数据库都有一个通用的修复程序: 使用.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或Bash任务,我们就必须执行如下脚本: 如果您的项目中有多个上下文,您只需添加标志-c,有时其他DBContext可能来自一些nugget包

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

另一个选项,也是我最后使用的选项,它基本上执行相同的过程,不同的是它通过使用已经编译的.dll文件来执行,因此您不必复制整个项目来进行迁移。任务的设置,虽然您必须填写许多输入,但它非常简单,并且应该可以与其他数据库一起使用。
但是,如果我必须使用SQL Server或MySQL,我会使用迁移脚本,因为在这个过程中,您只需要生成一个.SQL脚本,然后它就是部署迁移所需的唯一文件。

我终于解决了它

我发现有两种解决方案可以解决这个问题

首先,支持实体框架迁移的所有数据库都有一个通用的修复程序: 使用.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或Bash任务,我们就必须执行如下脚本: 如果您的项目中有多个上下文,您只需添加标志-c,有时其他DBContext可能来自一些nugget包

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

另一个选项,也是我最后使用的选项,它基本上执行相同的过程,不同的是它通过使用已经编译的.dll文件来执行,因此您不必复制整个项目来进行迁移。任务的设置,虽然您必须填写许多输入,但它非常简单,并且应该可以与其他数据库一起使用。
但是,如果我必须使用SQL Server或MySQL,我会使用迁移脚本,因为在这个过程中,您只需生成一个.SQL脚本,然后它就是部署迁移所需的唯一文件。

我成功地做到了!因此,我在发布管道上使用了一个bash脚本和dotnet ef database update命令,它在我的代理中首次安装了“dotnet ef tools”之后就开始工作了。不过,我最终还是使用了它,虽然没有使用我上面提到的迁移脚本,但效果也很好。很高兴知道您已经解决了这个问题。也许你可以和我们一起添加解决方案。那你就可以了。在这种情况下,其他人可以直接找到有用的解决方案。@KevinLu MSFT当然,我会的,我还是这个网站的新手:PI成功做到了!因此,我在发布管道上使用了一个bash脚本和dotnet ef database update命令,它在我的代理中首次安装了“dotnet ef tools”之后就开始工作了。不过,我最终还是使用了它,虽然没有使用我上面提到的迁移脚本,但效果也很好。很高兴知道您已经解决了这个问题。也许你可以和我们一起添加解决方案。那你就可以了。在这种情况下,其他人可以直接找到有用的解决方案。@KevinLu MSFT当然,我会的,我还是这个网站的新手:PHi@Ferran R。非常感谢在这里分享这个解决方案。你可以,这样其他人可以直接知道这是工作。嗨@Ferran R。非常感谢在这里分享这个解决方案。你可以,这样其他人就可以直接知道这是工作。