Миграция 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.
На этом этапе вы должны знать переменные среды и то, как обрабатывается сборка, чтобы понять, выполняете ли вы сборку в выпуске или отладке и работаете ли вы в средах разработки и производства (это не логическая среда, а конфигурация в переменных среды).
У вас есть докер-файл, проанализируйте, чтобы понять это.