Dacpac не должен удалять лишние столбцы
Я с радостью писал продукт, в котором используется проект базы данных Sql Server, и жизнь была хорошей, пока мы не обнаружили проблему в обновлениях.
Хотя мы создаем таблицы, хранимые процедуры и различные другие артефакты базы данных, после развертывания у клиентов они могут добавлять свои собственные столбцы в таблицы, созданные нашим dacpac.
Мы используем DacFx для развертывания (Microsoft.SqlServer.Dac), а также предоставляем необработанный dacpac для клиентов, которые настаивают на развертывании своих администраторов баз данных.
Хотя проблема все еще может присутствовать при использовании SSMS или аналогичных инструментов, я уверен, что с помощью "правильного" кода мы каким-то образом сможем предотвратить это при развертывании с помощью кода.
Кто-нибудь имел такие же проблемы и, возможно, нашел решение?
Обновление, добавление скриншота для настроек развертывания. Как видно на рисунке, настройка "Перетаскивать объекты в цель, но не в проект" уже отключена.
2 ответа
Мне нравится это утверждение "Я с радостью пишу продукт, использующий проект базы данных Sql Server, и жизнь была хорошей", ха-ха!
Вы можете написать вкладчик развертывания, который ищет новые столбцы и удаляет шаг удаления из процесса.
Вы можете написать свой собственный или у меня есть тот, который должен это сделать ( http://agilesqlclub.codeplex.com/), если вы используете мой, то это, вероятно, будет работать для вас:
/p:AdditionalDeploymentContributorArguments="SqlPackageFilter=KeepType(.*Column.*)"
Если вы хотите написать свой собственный, то вы можете использовать мой в качестве руководства (источник находится на codeplex) или посмотреть http://blogs.msdn.com/b/ssdt/archive/2013/12/23/dacfx-public-model-tutorial.asp частности, "Решение 2: Фильтрация во время развертывания".
издание
Существует опция "DropObjectsNotInSource", если значение равно false, столбцы останутся (но вам придется специально отбрасывать другие объекты (например, после развертывания).
В последней сборке есть больше опций, но не думайте, что вы можете указать, чтобы сохранить только столбцы.