EF Core: как добавлять, удалять и применять миграции в коде приложения - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть старая клиентская база данных, новое приложение, использующее EF Core (все Code First, новые разные и в основном несовместимые модели). У меня есть код импорта, который выполняет запросы к старой базе данных, затем обрабатывает данные, а затем сохраняет их в новой базе данных.

Большинство PITA использует консоль Package Manager для сброса базы данных при внесении изменений. Да, я знаю, что мне следует сохранять всю историю в последующих миграциях, но она предназначена для использования после развертывания, а не во время разработки, когда я постоянно меняю структуру и отношения, тестирую разные варианты.

Так что мой рабочий процесс включает в себя множество Update-Database 0 / Update-Database или удаление вручную файлов миграции, Add-Migration Initial / Update-Database. Было бы просто ужасно c, если бы я мог сделать все это из кода. Я запускаю свое приложение с аргументом import, затем оно сбрасывает всю структуру базы данных, удаляет все объекты и создает их с нуля. Что ж, учитывая использование тяжелых внешних ключей, было бы очень трудно обновить в противном случае.

Кстати, я также тестирую / тестирую различные RDBMS-ы с этим. Мне удалось вписать все параметры RDBM в мой файл appsettings.json, поэтому мне нужно изменить только один раздел моего конфигурационного файла, и я готов переключить RDBMS, например, с MS SQL на Postre SQL.

Все работает (включая спецификации RDBMS c hacks), однако использование диспетчера пакетов или Powershell для миграции баз данных утомительно. Я видел приложения, которые применяли миграцию при первом запуске, однако это не будет работать с разными RDBMS. Код, сгенерированный в процессе миграции, кажется другим, если используется другая СУБД.

Как удалить и построить файлы миграции из запущенного приложения? Как обновить базу данных из миграции во время выполнения?

РЕДАКТИРОВАТЬ: Кажется, мало интереса к этому стеку, поэтому мой обходной путь на данный момент PowerShell выполняется во время выполнения с использованием исходного кода. Я использую такие хаки время от времени для автоматизации строительных задач. Занимает дополнительное время, но его можно использовать многократно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...