Проблема с частичными проектами в Visual Studio Database Pro - PullRequest
3 голосов
/ 29 января 2009

В выпуске Visual Studio 2008 Database можно использовать «частичные проекты», чтобы разделить базу данных на несколько проектов для развертывания и сопровождения. Я пытался сделать это с нашим проектом, но столкнулся со следующей загадкой:

Если у вас есть проект, который определяет некоторые базовые таблицы, а затем у вас есть другой проект, который определяет новый набор таблиц с ограничениями, указывающими на таблицы в первом проекте, DBPro, похоже, не сможет отобразить эту взаимосвязь. Конкретная ошибка:

"CONSTRAINT имеет неразрешенную ссылку на таблицу foo" (где foo находится в исходной БД).

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

  • Создайте проект с именем BaseDB.

  • Определите в BaseDB таблицу с именем Users со следующим DDL:

    CREATE TABLE [dbo].[Users] ( 
        UserID INT IDENTITY(1,1) PRIMARY KEY, 
        UserName NVARCHAR(20) NOT NULL
    )
    
  • Экспорт BaseDB как частичного проекта с добавлением файла _BaseDB.files в ваш проект.

  • Создайте проект в том же решении с именем DerivedDB

  • Используйте частичный проект импорта, чтобы указать на BaseDB, подтверждая, если вам нравится, что в файлах импорта есть ссылка на заглушку, указывающая на таблицу Users в BaseDB.

  • Определите таблицу в DerivedDB с именем PowerUsers со следующим DDL:

    CREATE TABLE [dbo].[PowerUsers] ( 
        PowerUserID INT IDENTITY(1,1) PRIMARY KEY, 
        UserID INT NOT NULL
    )
    
  • Если в этот момент вы выполняете «Build», все работает.

  • Добавить ограничение FOREIGN KEY в проекте DerivedDB из PowerUsers для пользователей со следующим DDL:

    ALTER TABLE [dbo].[PowerUsers]
        ADD CONSTRAINT [PowerUsers_Users_FK]
        FOREIGN KEY (UserID)
        REFERENCES [dbo].[Users] (UserID)
    

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

Вопросы:

  1. Есть ли способ исправить ссылки на ограничения в проектах базы данных?

  2. Если нет, следует ли зарезервировать частичные проекты для серии хранимых процедур, а базовый проект зарезервировать для всех DDL базовых таблиц и ограничений?

...