Dacpac не должен удалять лишние столбцы

Я с радостью писал продукт, в котором используется проект базы данных Sql Server, и жизнь была хорошей, пока мы не обнаружили проблему в обновлениях.

Хотя мы создаем таблицы, хранимые процедуры и различные другие артефакты базы данных, после развертывания у клиентов они могут добавлять свои собственные столбцы в таблицы, созданные нашим dacpac.

Мы используем DacFx для развертывания (Microsoft.SqlServer.Dac), а также предоставляем необработанный dacpac для клиентов, которые настаивают на развертывании своих администраторов баз данных.

Хотя проблема все еще может присутствовать при использовании SSMS или аналогичных инструментов, я уверен, что с помощью "правильного" кода мы каким-то образом сможем предотвратить это при развертывании с помощью кода.

Кто-нибудь имел такие же проблемы и, возможно, нашел решение?

Обновление, добавление скриншота для настроек развертывания. Как видно на рисунке, настройка "Перетаскивать объекты в цель, но не в проект" уже отключена.

DeploymentOptions

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, столбцы останутся (но вам придется специально отбрасывать другие объекты (например, после развертывания).

В последней сборке есть больше опций, но не думайте, что вы можете указать, чтобы сохранить только столбцы.

Другие вопросы по тегам