Миграция EF Core в Docker-контейнер

Я настраиваю WebApi в.NET Core 2.0. Я буду использовать Entitty Framework Core в качестве ORM. Целое приложение будет развернуто как Docker Container. В этом случае меня немного беспокоит способ обработки миграции БД. Я имею ввиду ПРОИЗВОДСТВЕННУЮ среду. Вот что мне удалось исследовать:

  • Мы просто запускаем Database.Migrate() в приложении и начинаем забывать весь мир - хм, как-то мне это не нравится;-)
  • Database.Migrate(), управляемый параметром командной строки (запустите контейнер докера один раз с указанным параметром для переноса БД)
  • Войдите в контейнер приложений и выполните dotnet ef database update
  • Генерация простого старого SQL на основе миграций и выполнение его из инструмента управления БД. Кажется oldschool но действительный. То, что я ненавижу, это возиться с выполнением сценариев самостоятельно.
  • Создайте конкатайнер базы данных, в котором уже есть сценарии, сгенерированные из приведенного выше кода, и которые будут автоматически выполнять их.

Любые другие предложения? Или какое самое лучшее и правильное решение?

С уважением

0 ответов

На мой взгляд, это ваша первая точка (должный запуск Database.Migrate()), которая в основном соответствует нашему варианту использования. Так что для меня в настоящее время это предпочтительный способ сделать это.

У нас есть несколько дополнительных созвездий в процессе запуска:

  • Контейнер Docker только локально (для среды разработки и тестирования обязательно)
  • Собственный запускаемый проект, который выполняет часть Database.Migrate() (потому что у нас более одного проекта с собственной базой данных)
  • Дополнительный проект с собственно сайтом API:)
  • Производственная среда с сервером Azure SQL (опубликована и развернута через конвейер Azure DevOps.

  • Миграции создаются в собственном проекте через dotnet ef...

    dotnet ef migrations добавляет "ваше имя миграции" --startup-project "путь к вашему собственному API" --context "имя контекста базы данных"

Важно: вы должны сначала изменить рабочий каталог проекта миграции, чтобы использовать другой запускаемый проект, но сгенерировать файлы миграции в "проекте миграции".

В нашем случае он отлично работает с разными API с их собственными базами данных за szene.

С уважением

Docker не влияет на способ запуска приложений.NET Core.

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

У вас есть докер-файл, проанализируйте, чтобы понять это.