我有两个物体,一个是印刷机,另一个是缝纫:
Press
------------------
PressID
Name
Stitching
------------------
StitchingID
Name
Cost因此,在我的网站上,当用户创建一个新闻媒体,他们可以选择创建一个缝纫为该印刷机。印刷机不需要缝纫。
我使用的是实体框架4,如果我从数据库中获得一个Press对象,我希望能够说:
Press p = getPressFromDB(pressId);
if (p.Stitching != null)
{
float cost = p.Stitching.Cost;
}我也希望能够:
Stitching s = getStitchingFromDB(stitchingId);
Press p = s.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文件时,我仍然有一对多的关系。一个出版社有一个拼接,但是一个缝纫有多个新闻实体。我更新了.edmx设计器中的关系,这样出版社就有零或-一个缝纫,而缝纫有一个设备。但我不知道这是否足够。这里有什么建议吗?
发布于 2011-04-20 01:05:58
如果出版社和缝纫之间的关系是一对一的,而且没有理由在一个单独的表中进行缝纫(也就是说,缝纫只与Press相关联,而没有其他类),那么最好将缝纫属性移到Press中。
PressID
Name
StitchingName
StitchingCost这使得您的模型设计更加简单,您的数据库也得到了正确的标准化。
在.net中,我将使StitchingCost和nullable类型。即。float? StitchingCost;
这将允许您检查是否增加了缝纫细节。
示例:
Press p = getPressFromDB(pressId);
if (p.StitchingCost.HasValue)
{
float cost = p.StitchingCost.Value
}发布于 2011-04-20 06:19:01
我认为StitchingID应该是Primary Key,也是Foreign Key to PressID
发布于 2011-05-13 19:28:40
我不明白你为什么想要一个StichingID,除非Stichings可以与印刷机以外的东西相关联。如果这是你所说的,而且每台压力机都可以有一个或零的针线,那么缝纫表就应该充当一个垫子的附加表。而不是使用StichingID,而是在Stiching表中使用主键be PressID。因此,1:0-1关系是直接执行的。我认为实体框架应该不难认识到这一点。
https://stackoverflow.com/questions/5724434
复制相似问题