2012-01-17 170 views
0

我對EDM很新,在過去寫過很多ADO.Net的東西。我有三個表:SQL數據庫,實體數據模型和1對1實體

**Product:** 
Prod_ID - PK 

**Product_MaxLoan** 
Prod_ID - PK 

**Product_MinLoan** 
Prod_ID - PK 

這些表,在MS SQL 2005年舉辦,有沒有FKS或約束配置的是,他們有一個名義上的1對1的關係。例如,ID爲1的產品的每一行,在Product_MaxLoan和Product_MinLoan中都會有一行,每個ID的ID爲1.

在Visual Studio 2010中,我想正確設置EDM,以便基數被設置爲1到1.我之前對錶和下面的設置有FK約束,但是,這隻會允許0..1基數(爲了迎合,我想,產品可能沒有Product_MaxLoan或Product_MinLoan)。

**Product:** 
Prod_ID - PK 

**Product_MaxLoan** 
ID - PK 
Prod_ID - FK 

**Product_MinLoan** 
ID - PK 
Prod_ID - FK 

問題:

  • ,你有什麼建議於2005年SQL設置了這些表?對於EDM中的1對1關係,你會設置FK嗎?
  • 您可以在SQL 2005中設置一個EDM從數據庫導入時讀取的PK關係嗎?
  • 一個產品包含大約300個屬性,因此在一個表中包含所有這些 數據將會導致數據庫規範化程度較差(因此 中的許多1 - 1表)。最好的做法是把所有這些 屬性放入一個EDM類中?我的直覺反應是打破它在數據庫中的結構(這是我的ADO遺產 即將推出),它有一個 產品的每個邏輯部分的類。

您的意見,將不勝感激。

最好的問候,

馬克

回答

0

在數據庫中使用此配置:

**Product:** 
Prod_ID - PK 

**Product_MaxLoan** 
Prod_ID - PK, FK (to Product) 

**Product_MinLoan** 
Prod_ID - PK, FK (to Product) 

這將迫使數據庫級別以及在EF一個一對一的關係。關係本身將爲1 - 0..1(Product可以不存在MaxLoanMinLoan),因爲實數1:1不能存在於數據庫中。真正的1:1要求兩個實體總是存在=如果第二個不存在,則不能插入第一個,如果第一個不存在,則不能插入第二個。如何在不關閉引用完整性的情況下插入它們?

+0

您好Ladislav,感謝您的建議,這是非常有道理的。從電火花加工的角度來看,你會建議我在一個班級擁有全部300個物業嗎?或者把它分成更小的班級?再次感謝。標記 – MagicalArmchair 2012-01-18 14:18:10