Совместное использование базы данных проектов между коллекциями командных проектов в TFS 2010
У меня есть проект базы данных, который использует серверы ссылок в нескольких представлениях и хранимых процедурах.
Согласно Microsoft, проекты баз данных Visual Studio 2010 явно не поддерживают серверы ссылок, но вы можете взломать их с помощью переменных References и SQLCMD: http://msdn.microsoft.com/en-us/library/bb386242.aspx
Моя база данных (сама база данных) имеет соединение сервера ссылок с базой данных хранилища. Проект базы данных хранилища хранится в отдельной коллекции командных проектов.
Есть ли способ добавить проект Warehouse в качестве ссылки в мой проект?
1 ответ
В следующей статье объясняется, как использовать ссылочные переменные в проекте базы данных. http://msdn.microsoft.com/en-us/library/bb386242.aspx
Это необходимо, когда вы ссылаетесь на базу данных, которая не находится в том же решении (см. Первую диаграмму, вторую строку).
В моем случае у меня, вероятно, будут отдельные решения для каждой отдельной бизнес-среды (внутренние приложения, внешние приложения, склад и т. Д.). Каждое из этих решений будет иметь несколько баз данных. Но базы данных должны будут ссылаться на базы данных, которые не находятся в одном и том же решении (например, во внутренней БД могут быть хранимые процедуры, которые извлекают данные из внешней БД).
В этом случае, я думаю, лучшее решение - обратиться к файлу.dbschema, который создается при сборке проекта. Вы можете настроить ночную сборку для каждого проекта и сделать так, чтобы выходные данные сборки были скопированы в определенную папку общего диска. Затем вы можете указать любой проект базы данных на схему любой другой базы данных, добавив ссылку на базу данных (описанную в статье выше) в.dbschema (на общем диске) для базы данных.
Если вы хотите сделать его более сложным, вы можете изменить шаблон сборки, чтобы скопировать необходимые файлы.dbschema из результатов сборки в каждый проект и проверить их.
В случае, когда база данных не имеет проекта и активно не изменяется, необходимо создать временный проект базы данных для базы данных, чтобы можно было создать файл.dbschema. Затем встроенный файл.dbschema может быть возвращен в зависимый проект, и вам не придется генерировать его снова, если он не изменится.
Я сделаю все возможное на примере...
Проблема: Проект ABC зависит от хранилища данных и от проекта XYZ. Project XYZ находится под контролем исходного кода в соответствии с другим решением, но хранилище не находится под контролем исходного кода.
Решение:
- Создание ночной сборки для проекта XYZ
- Сконфигурируйте выходной каталог сборки, чтобы перейти на общий диск
- Создайте пользовательский шаблон сборки для проекта ABC, который скопирует файл XYZ.dbschema в проект ABC и отметит его
- В проекте ABC щелкните правой кнопкой мыши "Ссылки на базу данных" и добавьте ссылку на XYZ, указав файл XYZ.dbschema (вместо проекта базы данных XYZ, который находится за пределами решения).
- Создайте ссылочные переменные для проекта XYZ (не уверен, что это необходимо...)
- Замените ссылки на XYZ в хранимых процедурах и представлениях ссылочными переменными, которые вы создали на предыдущем шаге (не уверен, что это необходимо…)
- Теперь ссылки в ABC на XYZ должны разрешиться.
- Создать новый проект базы данных (это может быть временный, одноразовый проект)
- Пусть он получит определение из хранилища (щелкните правой кнопкой мыши проект и выберите "Импорт из базы данных")
- Постройте проект
- Скопируйте файл Warehouse.dbschema из вывода сборки в проект ABC
- В проекте ABC щелкните правой кнопкой мыши "Ссылки на базу данных" и добавьте ссылку на файл Warehouse.dbschema.
- Создать ссылочные переменные для склада
- Замените ссылки на склад ссылочными переменными
- Теперь ссылки в ABC на Склад должны разрешиться.
Я не знаю, будет ли это работать именно так, но это теория. Надеюсь, поможет…