簡體   English   中英

建立一對一關系

[英]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 KeyPressID

除非Stichings可以與印刷機以外的其他東西相關聯,否則我根本不知道為什么要使用StichingID。 如果這是您要說的,並且每台印刷機可能有一個或零個印痕,則該印痕表應作為印刷機的附加表。 代替使用StichingID,在Stiching表中將主鍵設置為PressID。 因此,直接執行1:0-1關系。 我相信實體框架應該毫不費力地認識到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM