2011-05-01 102 views
3

我想有可以有一個孩子(一個或零)的實體。這個孩子和父母一樣。我不知道如何設置實體框架becouse我想爲每個實體有兩個導航屬性。一個導航到孩子,一個導航到父母。基本上它和雙向鏈表完全一樣。一對一的自我關係和實體框架

我覺得這個表的結構應該是足夠了:

int | id  | PK 
int | id_next | FK 
text | data 

但我怎麼可以創建一個/上一個項目的導航性能?我能夠爲下一個項目創建僅導航屬性。

感謝您的幫助。

回答

2

你不能。這裏的問題是一對一關係有一個非常具體的要求 - FK值在整個表中必須是唯一的。一旦唯一性不被執行,您可以添加指向同一父項的第二個實體,並且您擁有一對多關係。

爲了在您的示例中描述的自引用關係中強制執行此操作,您將在id_next上放置一個唯一索引,並且它將在SQL服務器中工作。問題是實體框架不支持唯一鍵。由於該實體框架只能建立兩種不同實體類型之間的一對一關係,其中實體類型中的FK也是其PK(唯一的方式是如何強制FK唯一)=兩個實體都具有相同的PK值。這不能與自引用關係一起工作,因爲在一個表中不能有兩個相同的PK值。

0

研究實體框架中的樹結構。你基本上需要一個垂直樹(即一個分支)。該框架不會強制執行一個分支,但您可以在業務邏輯中管理該分支。

2

您可以在EF4中通過在實體上指定0..1 - > 0..1的關係來實現。將其中一個導航屬性命名爲「上一個」和另一個「下一個」。這將在底層數據庫上創建一個隱藏字段。

我還沒有徹底測試這種方法,但它似乎工作時,我創建數據庫腳本。