Как избежать круговых ссылок с проектом Visual Studio 2012 Database

Я пытаюсь создать решение для базы данных в Visual Studio 2012.

У меня есть 5 баз данных, которые все существуют на одном сервере, поэтому я импортировал каждый из них в проект базы данных.

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

Проблема заключается в том, что у меня есть база данных A, ссылающаяся на B, а также на B, ссылающуюся на A, и это не позволит мне добавить эти две ссылки. Я получаю окно с сообщением "Добавление этого проекта в качестве ссылки приведет к циклической зависимости".

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

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

Ответ 1

Вы хотите извлечь свои схемы баз данных в файлы dacpac (при условии, что вы используете SSDT SQLProj файлы, а не старые файлы DBProj для своих проектов). Вы можете сделать это через SSMS или через командную строку SQLPackage. После того как вы извлекли, поместите их в место, где могут пострадать все проекты (и, желательно, все еще находится под контролем источника, чтобы все могли ссылаться на него). Добавьте эти файлы dacpac в свои проекты в качестве ссылок на базы данных, возможно, без возможности использовать переменную для имени базы данных.

Я написал ссылку на базу данных в своем блоге: http://schottsql.blogspot.com/2012/10/ssdt-external-database-references.html

Еще одно примечание - если вы создаете новые базы данных из этих проектов, вам, вероятно, придется пройти несколько проходов. Отключите параметр для запуска в качестве транзакции и выполните сбой при возникновении ошибки, чтобы некоторые объекты были созданы, повторяйте по мере необходимости, пока не будут созданы все объекты. Я использовал переменную в своих проектах под названием "DeployType" и настроил свои сценарии pre и post deploy для обработки DeployType "New" по-другому, поэтому он не будет пытаться заполнять/обновлять данные для "новых" сборников.