У меня есть база данных сервера sql, работающая с приложением .net 2015 mvc 5. Код моей базы данных управляется исходным кодом с использованием проекта SSDT. Я использую SqlPackage.exe для развертывания базы данных в промежуточной среде с использованием файла .Decpac, созданного в процессе сборки проекта SSDT. Это было сделано с помощью задачи powershell сборки VSTS. Таким образом, я могу вносить изменения в схему БД способом, контролируемым источником. Теперь проблема заключается в вставке основных данных для базы данных.
Я использую файл сценария sql, в котором есть сценарии вставки данных, которые выполняются как сценарий после развертывания. Этот файл также контролируется исходным кодом.
Проблема в том, что изначально мы подготовили сценарий вставки для спринта (взяв спринт n за основу), который хорошо работает для первого выпуска. но в следующем спринте, если обновить некоторые основные данные, то как следует обновить вставку основных данных:
- Добавить новый запрос на обновление/вставку в последний файл сценария? но в этом случае сценарий после развертывания будет выполняться CI, и он попытается вставить данные снова и снова в последующие сборки, которые в конечном итоге потерпят неудачу, если мы внесли некоторые изменения схемы в главные таблицы этой базы данных.
- Обновите существующие запросы на вставку в сценарии вставки данных. в этом случае у нас также есть проблемы, потому что в событии после сборки все данные будут повторно вставлены.
- Поддерживайте отдельные сценарии вставки данных для каждого сценария и обновляйте ссылку сценария на новый файл для события SSDT после сборки. Этот подход требует ручной работы и подвержен ошибкам, потому что разработчик должен помнить этот процесс. Также другая проблема с этим подходом заключается в том, что нам нужно настроить еще 1 сервер базы данных в ферме распределенных серверов. Сценарий вставки нескольких данных вызовет ошибки, потому что SSDT имеет последнюю схему, и он создаст базу данных с такой же. но в более старых сценариях данных есть вставка данных для предыдущей схемы (схема sprint wise db, которая была изменена в более поздних спринтах)
Так может ли кто-нибудь предложить лучший подход, который требует меньших ручных усилий, но может охватывать все вышеперечисленные случаи.
Спасибо, Рупендра.