3

在 Visual Studio 2008 数据库版本中,可以使用“部分项目”来允许将数据库分成多个项目以进行部署和维护。我一直在考虑在我们的项目中这样做,但遇到了以下问题:

如果您的项目定义了一些基表,然后您有一个不同的项目定义了一组新表,这些表具有指向第一个项目中表的约束,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 的同一解决方案中创建一个项目

  • 使用 Import Partial Project 指向 BaseDB,确认您是否喜欢在您的导入文件中有一个存根引用指向 BaseDB 中的 Users 表。

  • 使用以下 DDL 在 DerivedDB 中定义一个名为 PowerUsers 的表:

    CREATE TABLE [dbo].[PowerUsers] ( 
        PowerUserID INT IDENTITY(1,1) PRIMARY KEY, 
        UserID INT NOT NULL
    )
    
  • 如果您此时进行“构建”,一切正常。

  • 在 DerivedDB 项目中从 PowerUsers 添加 FOREIGN KEY CONSTRAINT 到具有以下 DDL 的用户:

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

执行上述步骤应该可以让您看到我正在谈论的错误。

问题:

  1. 有没有办法修复跨数据库项目的约束引用?

  2. 如果不是,那么是否应该为一系列存储过程保留部分项目,而为基表和约束的所有DDL 保留基本项目?

4

0 回答 0