Страницы

среда, 2 октября 2013 г.

Ведение проекта базы данных разработчиков и проекта производственной базы данных в Visual Studio 2012

Проект типа Database Project в Visual Studio вещь очень удобная, но есть один неприятный момент, а именно производственная база данных может отличаться по структуре и прочим атрибутам от базы данных разработчиков. Причем эти отличия, заключаются, не в том, что не все  разработки еще перенесены, а носят принципиальный характер, например пользователи, какие-то таблицы, нужные только для производственной среды и не имеющие отношения к разрабатываемому проекту.
Можно конечно хранить все в одном проекте, и перед очередной публикацией добавлять/убирать комментарии или включать/выключать скрипты из build. Но чуть подумав, я вроде нашел способ лучше и изящнее.
Еще в Visual Studio 2010 существовало такое понятие, как Composite Database Project, попробуем применить данный подход для решения стоящей перед нами задачей, а именно просто унаследуем производственную базу данных от базы данных разработчиков.


Для проверки этой идеи сделаем простейший тест.

Шаг 0. Подготовительный
Создаем на сервере две пустых базы данных:
DevDb - база данных разработчиков
ProdDb - производственная база данных.

DevDb должна содержать две таблицы: tab1 и tab3, имеющих очень простую структуру (для теста нам этого будет достаточно): [Id] INT NOT NULL. tab1 и tab3 - это нормальные таблицы, участвующие в разработке.
ProdDb, в отличие от DevDb должна содержать дополнительную таблицу tab2 (структура таблиц для нас не важна, главное их наличии) с похожей структурой. tab2 - это таблица специфичная только для производственной базы данных и не имеющая к отношения к разрабатываемому продукту.

Шаг 1. Создание проектов баз данных
Создаем пустой solution.
Добавляем Database project для базы данных разработчиков: DevDb
В проект добавляем две таблицы, скрипты таблиц ниже:
Строим проект (Build)

Добавляем в solution проект производственной базы данных ProdDb
В проект добавляем таблицу tab2
И теперь наследуемся от проекта DevDb, добавляя его в Database References.

Обязательно указывая Database Location: Same database

Шаг 2. Публикация баз данных
Публикацию баз данных производим штатным образом, естественно каждый проект имеет собственную строку подключения
База данных разработчиков
Производственная база данных
Видим в результаты, которые нас вполне устраивают, в SQL Management Studio


Нюансы.
Бонус, тем, кто дочитал до конца.
Обращаю внимание, что Pre/Post-deployment скрипты работают только из того, проекта, который вы в данный момент публикуете. Т.е. Post-Deployment script из проекта DevDb не сработает, при публикации ProdDb.

Update от 06.12.2013:
Reference Database так же не наследуются от родительского проекта, и должны быть прописаны в наследниках.

Update от 09.12.2013 от Владимира Ладыгина:
Для проекта наследника можно подключить Post-Deployment script из родительского проекта путем добавления Add existing item (As linked). Поэтому здесь, все достаточно хорошо.


Комментариев нет :

Отправить комментарий