Прежде всего, вы отметили это с помощью visual studio 2012 - если вы используете эту версию, обязательно обновите ее до 2013 или 2015 года и получите последнюю версию SSDT, поскольку выпуски выпускаются каждые 3 месяца с новыми функциями и исправлениями поэтому стоит завести новую версию - бит, о котором я говорю ниже, - это текущее поведение, я не знаю, было ли все это в оригинальной ssdt в visual studio 2012.
Есть несколько вещей, чтобы сказать, во-первых, вы можете обеспечить принудительное развертывание с помощью параметра/p: BlockWhenDriftDetected в сочетании с регистрацией базы данных в качестве приложения уровня данных (/ p: RegisterDataTierApplication). Это позволит вам сделать это:
- Сложение dacpac 1
- Deploy dacpac 1
- Сложение dacpac 2
- Deploy dacpac 2
- Сложение dacpac 3
Было бы остановить вы не сможете развернуть dacpac 2 до того, как dacpac 1 был развернут, но не идеален, потому что если вы построили dacpac 3 перед развертыванием dacpac 2, то вы не сможете использовать его из-за восстановления dacpac 3, поэтому он не идеален.
Когда вы имеете дело с изменениями для базы данных (любые rdbms не только сервер sql), иногда случаются случаи, когда нам нужно выпустить изменения в фазах, и для меня это скорее проблема процесса, чем технологическая.Что я делаю:
- Создать первую часть изменения
- Создать билет в отставании завершить Изменение
- Развертывание изменений
- В будущей итерации после развертывания, подобрать билет, чтобы завершить изменение
- Развертывание финализации
Некоторые вещи, чтобы отметить об этом:
- Это требует дисциплины, чтобы убедиться, что вы привести в порядок и полный материал, работающий в гибком образом не означает, что коряво :)
- Любые сценарии вы пишете должны быть идемпотентна поэтому, если вы хотите настроить некоторые статические данные и т.д. использовать что-то вроде, если существует проверки или слияния заявление, если изменить любые объекты схемы завернуть их в случае существует и т.д. Если вы сделаете это, вы найдете развертывание гораздо более простой Почувствуйте
Если вы будете следовать этому а не полагаться на тип политики версий, тогда вам не нужно беспокоиться о том, какой заказ вы развертываете dacpacs, если сценарий имеет важное значение, оставьте его в сценарии пост-развертывания и проверьте, должен ли сценарий выполнять какую-либо работу перед его выполнением. Если ваши скрипты становятся слишком большими, вы можете использовать: r sqlcmd import, чтобы разделить их на разные файлы. Я также слышал о том, как люди используют хранимые процедуры развертывания и вызывают их из сценариев после развертывания.
Я предпочитаю процесс, когда вы просто развертываете последнюю (или конкретную версию) dacpac, так как это означает, что вы всегда можете развернуть эту версию независимо от того, собираетесь ли вы перейти к более поздней версии или вернуться к более ранней сборке.
Наконец, с вашим примером добавления столбца fk, не подлежащего обнулению, это можно сделать с помощью единственного развертывания dacpac. Для этого вы должны:
- Создать новое определение таблицы (в том числе ненулевого и ограничения внешнего ключа)
- В вашем после развертывания сценария сделать обновление на столе так, что он устанавливает данные правильно (очевидно, что делает его идемнотентные поэтому он может остаться в навсегда, если потребности быть)
- при развертывании включения/р: GenerateSmartDefaults
что происходит, когда сценарий развертывания генерируемый вы получаете сценарий, который выглядит как:
- Pre-Deploy скрипт (если таковые имеются)
- Создать столбец не пустой с временным ограничением по умолчанию
- падение временное ограничение
- Создание внешнего ключа с NOCHECK так это на самом деле не enfored
- Run пост- развернуть сценарий
- Включить ограничение внешнего ключа с помощью «с проверкой проверки»
/P: параметры, что я Мент ioned - args, вы переходите к sqlpackage.exe.если вы не используете это, но используете какой-либо другой способ для развертывания, вы можете передать их как параметры, если вы сообщите мне, как вы развертываете, если вы застряли, и я могу вам помочь. Описание аргументов приведено в файле https://msdn.microsoft.com/en-us/library/hh550080.aspx (sqlpackage.exe Синтаксис командной строки).
Сообщите мне, если у вас есть какие-либо вопросы, есть еще кое-что, о чем нужно подумать, но проверка в определении схемы и автоматическое создание сценариев развертывания сокращает работу, чтобы резко развернуть изменения и означает, что вы можете сосредоточиться на чем-то более полезном - написание единичных тестов для одного :).
Ed
Вы посмотрели Ready-Roll? http://www.ready-roll.com/ Это инструмент от RedGate, который интегрируется с Visual Studio. Я думаю, что это то, что вам нужно. –
Поскольку вы спросили о других типах проектов, взгляните на [Entity Framework 7 с миграциями] (https://channel9.msdn.com/Blogs/Seth-Juarez/Migrations-in-Entity-Framework-7- с-Брис-Lambson) –