【发布时间】:2011-04-20 00:52:56
【问题描述】:
我有两个对象,一个 Press 和一个 Stitching:
Press
------------------
PressID
Name
Stitching
------------------
StitchingID
Name
Cost
因此,在我的网站上,当用户创建印刷机时,他们可以选择为该印刷机创建拼接。印刷机不必缝合。
我正在使用 Entity Framework 4,如果我从数据库中获取 Press 对象,我想说:
Press p = getPressFromDB(pressId);
if (p.Stitching != null)
{
float cost = p.Stitching.Cost;
}
我也希望能够做到:
Stitching s = getStitchingFromDB(stitchingId);
Press p = s.Press;
如何在这两个表之间建立一对一的关系?
编辑:
我听从了另一个论坛用户的建议并运行了这个脚本来创建两者之间的关系并防止 Stitching 与多个 Press 关联:
CREATE TABLE PressStitching (PressID int NOT NULL PRIMARY KEY, StitchingID int NOT NULL,
CONSTRAINT FK_PressStitching_Press FOREIGN KEY(PressID) REFERENCES Press(PressID),
CONSTRAINT FK_PressStitching_Stitching FOREIGN KEY(StitchingID) REFERENCES Stitching(StitchingID),
CONSTRAINT UNQ_Stitching UNIQUE(StitchingID))
但是当我更新我的 .edmx 文件时,我仍然得到一个一对多的关系。一个 Press 有一个 Stitching,但一个 Stitching 有多个 Press 实体。我更新了 .edmx 设计器中的关系,以便印刷机具有零或一的缝合,而缝合具有设备之一。但我不知道这是否足够。这里有什么建议吗?
【问题讨论】:
-
不完全是重复的,但this post 应该会给你一个好主意。
-
@Bala - 是的,我看到了,最重要的答案是“对于一对一的关系,EF 希望这些表使用相同的主键。”但我不知道该怎么做。两个表一个主键?
-
“当用户创建印刷机时,他们可以选择为该印刷机创建一个拼接”——然后是 1:0..1(“一到零或一") 关系,而不是真正的 1:1 关系。
-
@onedaywhen - 你是对的,我的错。你知道怎么做吗? :)
标签: c# asp.net sql entity-framework