3

我有两张桌子:

CREATE TABLE Order (
    orderId INTEGER IDENTITY NOT NULL,
    PRIMARY KEY (orderId) 
)

CREATE TABLE OrderAdditionalDetails (
    additionalDetailsId INTEGER IDENTITY NOT NULL,
    orderId INTEGER NOT NULL,
    PRIMARY KEY (additionalDetailsId),
    FOREIGN KEY (orderId) REFERENCES Order(orderId)
)

我在 OrderAdditionalDetails 表的 orderId 字段上声明了一个外键 (FK_OrderAdditionalDetails_Order)。我对 OrderAdditionalDetails 表中的 orderId 字段也有一个“唯一”约束。这个想法是每个“订单”在“OrderAdditionalDetails”表中都有零个或一个条目。

这一切都由实体框架模型文件拾取,但是当我尝试创建 Navigation 属性时,它只允许我声明一对多的关系。我得到的错误如下:

运行转换:多重性在关系“FK_OrderAdditionalDetails_Order”中的角色“OrderAdditionalDetails”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是*。

我真的不确定这意味着什么 - 谷歌搜索错误并没有帮助。任何人都可以阐明我做错了什么吗?

4

3 回答 3

2

在您的OrderAdditionalDetails表格中,删除该additionalDetailsIDorderID并将CLUSTERED PRIMARY KEY. 保留FOREIGN KEY你已经拥有的。这是实现这一点的正确方法。

该列不仅没有增加任何价值additionalDetailsId,而且在表格中占用更多空间会使事情变得更糟。orderID已经是足够的密钥;您不需要辅助人工密钥,它只不过是orderID.

于 2012-12-27T06:52:20.957 回答
1

您的外键必须定义为UNIQUE以强制执行一对零或一关系。

也许尝试这样的事情:

CREATE TABLE OrderAdditionalDetails (
    additionalDetailsId INTEGER IDENTITY NOT NULL,
    orderId INTEGER NOT NULL UNIQUE,
    PRIMARY KEY (additionalDetailsId),
    FOREIGN KEY (orderId) REFERENCES Order(orderId)
)

另请参阅:在 SQL Server 中实现一对零或一关系

于 2012-07-20T21:47:17.467 回答
0

我试图将表与自身的视图以及其他一些字段相关联。(有一个很好的理由与答案无关)

导致相同错误的原因是视图上有多个关键字段。尽管我已经指定了关联中涉及的字段,但它希望两者都是 1 对 1 工作的唯一关键字段。

我还在视图中将关键字段设置为 Distinct,但我在删除其他字段的关键属性之前这样做了,所以它可能是必要的,也可能不是必要的。

于 2014-11-03T16:41:06.727 回答