[英]Creating a one-to-one relationship
我有兩個對象,一個是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;
如何在這兩個表之間建立一對一關系?
編輯:
我在另一個論壇上遵循了用戶的建議,並運行了該腳本以在兩者之間建立關系,並防止針跡與多個印刷機相關聯:
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設計器中更新了關系,以便一台印刷機的縫合為零或一個,而縫合的設備為一個。 但是我不知道這是否足夠。 有什么建議嗎?
如果Press和Stitching之間的關系是一對一的,並且沒有理由將Stitching放在單獨的表中(即Stitching僅與Press關聯,而沒有其他類別),則最好將Stitching屬性移到Press中
PressID
Name
StitchingName
StitchingCost
這使您的模型設計更加簡單,並且數據庫正確歸一化。
在.net中,我將使用StitchingCost和可為null的類型。 即。 float? StitchingCost;
然后,您可以檢查是否已添加拼接細節。
例:
Press p = getPressFromDB(pressId);
if (p.StitchingCost.HasValue)
{
float cost = p.StitchingCost.Value
}
我認為StitchingID
應該是一個Primary Key
,也是一個Foreign Key
來PressID
除非Stichings可以與印刷機以外的其他東西相關聯,否則我根本不知道為什么要使用StichingID。 如果這是您要說的,並且每台印刷機可能有一個或零個印痕,則該印痕表應作為印刷機的附加表。 代替使用StichingID,在Stiching表中將主鍵設置為PressID。 因此,直接執行1:0-1關系。 我相信實體框架應該毫不費力地認識到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.