2010-12-07 211 views
0

EF 4不支持不基於外鍵/主鍵的關聯。有很多場合您需要使用非關鍵字段在表格之間導航。實體框架4 - 關聯

例如,藥物表具有:

medID (PK) 
medGrouperID 
medName 

的成分表具有:

ingredientID (PK) 
ingredientName 

和鏈路表具有:

medGrouperIDID (PK) 
ingredientID (PK) 

在這種情況下EF沒有按」不要讓我在藥物和鏈接表之間建立聯繫,因爲兩者都沒有外鍵。

我很長時間沒有做過任何db設計,所以我很難理解這個限制;這是否遵循良好的數據庫設計或EF失敗?

EDIT
的MedGrouperID允許具有相同的成分,使用的指令等的所有藥物組合在一起。這消除了如果每種藥物都具有其自己的成分記錄,用途等的數據的重複數據。

添加新的MedGrouper表格可以工作,但是這會需要一個額外的連接,這對性能不利。

用藥

* MedID (PK) 
* MedGrouperID (FK) 
* MedName 

MedGrouper * MedID(FK) * MedGrouperID(PK)

成分

* IngredientID (PK) 
* IngrediantName 

MedicationIngredients(結/連接表)

* MedGrouperID (PK, FK) 
* IngredientID (PK, FK) 

/EDIT

+1

爲什麼您的鏈接表與您想要關聯的兩個表都有FK關係?當沒有藥物或成分存在時,爲什麼你想要關係記錄存在? – 2010-12-07 23:49:10

+0

我的理解是FK必須包含PK的所有字段。所以med和成分表不能使用Link表,因爲它們只有部分重疊的鍵。 – Alistair77 2010-12-08 10:13:08

回答

1

這是遵循良好的數據庫設計或EF的失敗?

這不是EF的失敗,這是一個不正確的數據庫設計(抱歉,無情)。該設計無法從純粹的數據庫查詢角度進行工作,因此您不能指望EF也能解決這個問題。

看來你有配料一個*..*藥物和之間

因此,你應該有以下表格:

用藥

  • MedID(PK)
  • MedGrouperID
  • MedName

成分

  • IngredientID(PK
  • IngrediantName

MedicationIngredients(結/連接表)

  • MedID(PKFK
  • IngredientID(PKFK

如果您生成一個模型,使用實體框架,EF將創建兩個實體的多對多關聯禮物,並且連接表不會有根本不需要映射。

您必須記住的事情是關係基於參照完整性,您沒有在當前數據庫模式中正確設置關係。

HTH。