Обновление БД postgreSQL с помощью миграции EFCore в Azure DevOps

В Azure DevOps я использовал способ обновления базы данных SQL Server с помощью Entity Framework Core с использованием двух задач:

  1. В моем конвейере сборки: Эта задача, которая сгенерировала сценарий sql с моим db миграции.
  2. В конвейере выпуска: Эта задача для обновления базы данных с помощью этого скрипта.

Дело в том, что теперь, когда я использую базу данных PostgreSQL, я не могу найти простой и понятный способ обновить базу данных таким же образом. Я видел еще одну задачу для MySQL, который выполняет ту же задачу, что и моя задача конвейера выпуска с SQL Server, но ничего для PostgreSQL.

Поэтому я подумал, что могу в основном выполнить dotnet ef update database (с правильным набором параметров) в конвейере, но мне было интересно, есть ли на самом деле способ продолжить обновление базы данных плавным способом, как я делал раньше.


person Ferran R.    schedule 15.06.2020    source источник
comment
Мне это удалось! Поэтому я использовал сценарий bash в моем конвейере выпуска с командой dotnet ef database update, и он работал (после первой установки инструментов dotnet ef в моем агенте). Однако в итоге я использовал эту задачу, которая тоже сработала, хотя и не со сценариями миграции, как те, которые я упомянул выше.   -  person Ferran R.    schedule 15.06.2020
comment
Рад узнать, что вы решили эту проблему. Возможно, вы могли бы добавить решение вместе с нами. Тогда вы можете принять свой ответ. В этом случае другие могут напрямую найти полезное решение.   -  person Kevin Lu-MSFT    schedule 16.06.2020
comment
@ KevinLu-MSFT Конечно, я сделаю это, я все еще новичок на этом сайте: P   -  person Ferran R.    schedule 16.06.2020


Ответы (1)


Наконец-то я решил это исправить.

Я нашел два решения, чтобы исправить эту проблему.

  1. First, there's a common fix for all the databases that support Entity Framework Migrations:
    • Using a .NET Core Task, we'll have to install the dotnet ef tool: The task would look like this:

Установка инструментов 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 могут поступать из некоторых пакетов слепков).

Обратите внимание, что я добавил флаг --no-build, поскольку я уже построил проект в конвейере сборки, следуя передовой практике.


  1. Другой вариант (и тот, который я, наконец, использовал) заключался в использовании этой задачи., который в основном выполняет тот же процесс, с той разницей, что он делает это с использованием уже скомпилированных файлов .dll, поэтому вам не придется копировать весь проект, чтобы миграции работали. . Настройка задачи, хотя вам и нужно заполнить много входных данных, она довольно проста и должна работать и с другими базами данных.

Однако, если бы мне пришлось использовать SQL Server или MySQL, я бы использовал сценарий миграции, поскольку это намного проще (вам просто нужно сгенерировать .sql , а затем это единственный файл, необходимый для развертывания миграций).

person Ferran R.    schedule 16.06.2020
comment
Привет, @Ferran R. Большое спасибо за это решение, опубликованное здесь. Вы можете принять свой ответ, чтобы другие могли напрямую узнать, что это работа. - person Kevin Lu-MSFT; 17.06.2020