我有两张桌子:
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)
)
我在orderIditionalDetails表上的orderId字段上声明了一个外键(FK_OrderAdditionalDetails_Order)。我对OrderAdditionalDetails表中的orderId字段也有一个“唯一”约束。我们的想法是每个'订单'在'OrderAdditionalDetails'表中都有零个或一个条目。
这一切都被实体框架模型文件所取代,但是当我尝试创建Navigation属性时,它只允许我声明1对多的关系。我得到的错误如下:
运行转换:在关系'FK_OrderAdditionalDetails_Order'中的角色'OrderAdditionalDetails'中,多重性无效。由于Dependent Role属性不是关键属性,因此Dependent Role的多重性的上限必须为*。
我真的不确定这意味着什么 - 谷歌搜索错误并不是很有帮助。有人能说清楚我做错了吗?
答案 0 :(得分:2)
在OrderAdditionalDetails
表格中,移除additionalDetailsID
列并将orderID
设为CLUSTERED PRIMARY KEY
。保留您已有的FOREIGN KEY
。这是实现这一目标的正确方法。
additionalDetailsId
列不仅没有添加任何值,而且通过占用表格中的更多空间会使事情变得更糟。 orderID
已经足够了;你不需要只是orderID
的代理人的辅助人工密钥。
答案 1 :(得分:1)
您的外键必须定义为UNIQUE
才能实施一对一或零关系。
也许尝试这样的事情:
CREATE TABLE OrderAdditionalDetails (
additionalDetailsId INTEGER IDENTITY NOT NULL,
orderId INTEGER NOT NULL UNIQUE,
PRIMARY KEY (additionalDetailsId),
FOREIGN KEY (orderId) REFERENCES Order(orderId)
)
答案 2 :(得分:0)
我试图将一个表与自己的视图以及其他一些字段相关联。 (这有一个非常好的理由与答案无关)
导致相同错误的原因是视图上有多个关键字段。尽管我已经指定了关联中涉及的字段,但它希望它们都是1到1工作的唯一关键字段。
我还在视图中将关键字段设置为Distinct,但是在删除其他字段的key属性之前我已经这样做了,所以它可能是,也可能不是。