我有两个表:
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)
)
我在OrderId字段的OrderAdditionalDetails表上声明了一个外键(FK_OrderAdditionalDetails_Order)。我在OrderAdditionalDetails表中的orderId字段上也有一个“唯一”约束。这个想法是,每个“订单”在“ OrderAdditionalDetails”表中将有零个或一个条目。
所有这些都由实体框架模型文件处理,但是当我尝试创建Navigation属性时,它只允许我声明一对多关系。我得到的错误如下:
运行转换:多重性在关系“ FK_OrderAdditionalDetails_Order”中的角色“ OrderAdditionalDetails”中无效。因为从属角色属性不是关键属性,所以从属角色多重性的上限必须为*。
我真的不确定这意味着什么-谷歌搜索错误并没有帮助。有人可以阐明我做错了什么吗?
最佳答案
在OrderAdditionalDetails
表中,删除additionalDetailsID
列,并将orderID
设置为CLUSTERED PRIMARY KEY
。保留您已有的FOREIGN KEY
。这是实现此目标的正确方法。additionalDetailsId
列不仅没有添加任何值,而且还占用了表更多的空间,从而使情况变得更糟。 orderID
已经足够了;您不需要辅助人工密钥,它只是orderID
的替代。
关于c# - 使用 Entity Framework 创建一对一或“零或一个”关系时遇到麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11586788/