Совместное использование проектов базы данных между коллекциями командных проектов в TFS 2010

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

Согласно Microsoft, проекты базы данных Visual Studio 2010 не поддерживают явно серверы ссылок, но вы можете взломать его, используя ссылки и переменные SQLCMD: http://msdn.microsoft.com/en-us/library/bb386242.aspx

Моя база данных (сама база данных) имеет соединение сервера ссылок с базой данных Warehouse. Проект базы данных хранилища хранится в отдельной коллекции командных проектов.

Есть ли способ добавить проект Warehouse в качестве ссылки в моем проекте?


person simon    schedule 17.11.2011    source источник


Ответы (1)


В следующей статье объясняется, как использовать ссылочные переменные в проекте базы данных. http://msdn.microsoft.com/en-us/library/bb386242.aspx

Это необходимо, когда вы ссылаетесь на базу данных, которая не находится в том же решении (см. первую диаграмму, вторая строка).

В моем случае у меня, вероятно, будут отдельные решения для каждой бизнес-среды (внутренние приложения, внешние приложения, склад и т. д.). Каждое из этих решений будет иметь несколько баз данных. Но базы данных должны будут ссылаться на базы данных, которые не находятся в одном и том же решении (например, внутренняя БД может иметь хранимые процедуры, которые извлекают данные из внешней БД).

В этом случае я думаю, что лучшим решением будет обратиться к файлу .dbschema, который создается при сборке проекта. Вы можете настроить ночную сборку для каждого проекта и скопировать выходные данные сборки в определенное место на общем диске. Затем вы можете указать любой проект базы данных на схему любой другой базы данных, добавив ссылку на базу данных (описанную в статье выше) в .dbschema (на общем диске) для базы данных.

Если вы хотите сделать его более сложным, вы можете изменить шаблон сборки, чтобы скопировать необходимые файлы .dbschema из выходных данных сборки в каждый проект и зарегистрировать их.

В случае, когда база данных не имеет проекта и активно не изменяется, необходимо будет создать временный проект базы данных для базы данных, чтобы можно было построить файл .dbschema. Затем созданный файл .dbschema можно вернуть в зависимый проект, и вам не придется создавать его снова, пока он не изменится.

Я сделаю все возможное на примере…

Проблема: проект ABC зависит от хранилища данных и от проекта XYZ. Project XYZ находится в системе управления версиями в другом решении, но Warehouse не находится в системе управления версиями.

Решение:

  1. Создайте ночную сборку для проекта XYZ
  2. Настройте выходной каталог сборки для перехода на общий диск
  3. Создайте собственный шаблон сборки для проекта ABC, который скопирует файл XYZ.dbschema в проект ABC и зарегистрирует его.
  4. В проекте ABC щелкните правой кнопкой мыши «Ссылки на базу данных» и добавьте ссылку на XYZ, указав файл XYZ.dbschema (вместо проекта базы данных XYZ, который находится вне решения)
  5. Создайте эталонные переменные для проекта XYZ (не уверен, что это необходимо…)
  6. Замените ссылки на XYZ в хранимых процедурах и представлениях ссылочными переменными, которые вы создали на предыдущем шаге (не уверен, что это необходимо…)
  7. Теперь ссылки в ABC на XYZ должны разрешиться.
  8. Создайте новый проект базы данных (это может быть временный одноразовый проект)
  9. Попросите его извлечь определение из хранилища (щелкните правой кнопкой мыши проект и выберите «Импортировать из базы данных»)
  10. Построить проект
  11. Скопируйте файл Warehouse.dbschema из выходных данных сборки в проект ABC.
  12. В проекте ABC щелкните правой кнопкой мыши «Ссылки на базу данных» и добавьте ссылку на файл Warehouse.dbschema.
  13. Создайте эталонные переменные для хранилища
  14. Заменить ссылки на Хранилище ссылочными переменными
  15. Теперь ссылки в ABC на Хранилище должны разрешаться.

Я не знаю, будет ли это работать просто так, но это теория. Надеюсь, поможет…

person simon    schedule 30.01.2012