【问题标题】:SQL Server 2005 + Entity Designer -- Foreign Key constraint error?SQL Server 2005 + Entity Designer -- 外键约束错误?
【发布时间】:2023-11-20 12:15:01
【问题描述】:

在 VS2010 中使用实体设计器为 SQL Server 2005 构建数据库。当我尝试通过“从模型生成数据库”生成的 SQL 实际构建表时遇到问题;表都正确创建,但它在外键约束上发声。

此处列出了有争议的实体:

World:
  WORLD_ID [int32] (Primary Key)
  Name [String]

Zone:
  WORLD_ID [int32] (Primary key, FK on World.WORLD_ID)
  ZONE_ID [int32] (Primary key)
  Name [String]

Region:
  WORLD_ID [int32] (Primary key, FK on Zone.WORLD_ID)
  ZONE_ID [int32] (Primary key, FK on Zone.ZONE_ID)
  REGION_ID [int32] (Primary key)
  Name [String]

这部分生成的SQL代码是问题所在:

-- Creating foreign key on [ZONE_ID], [WORLD_ID] in table 'Regions'
ALTER TABLE [dbo].[Regions]
ADD CONSTRAINT [FK_ZoneRegion]
    FOREIGN KEY ([ZONE_ID], [WORLD_ID])
    REFERENCES [dbo].[Zones]
        ([ZONE_ID], [WORLD_ID])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

错误是这样的:

引用的表“dbo.Zone”中没有主键或候选键 与外键“FK_ZoneRegion”中的引用列列表匹配。

我不得不假设问题与以下事实有关,在我的多列主键 (WORLD_ID+ZONE_ID+REGION_ID) 中,ZONE_ID 和 WORLD_ID 都是外键,特别是 WORLD_ID 实际上也是外键在表格中键入 FK 的来源。

我的结构有问题吗?难道我只能有一个从 Zone -> Region 的关联,实际上我必须有两个关联,一个来自 World -> Region,一个来自 Zone -> Region?

谢谢, -丹

【问题讨论】:

    标签: sql-server visual-studio ado.net foreign-keys composite-primary-key


    【解决方案1】:

    对于它的价值,我最终只是从头开始重新构建实体图,并且它起作用了。不知道我的初始图表是否有错误,或者这是否是实体设计器的故障。

    【讨论】: