2012-01-13 125 views
0

我在圖形中的節點之間有多對多的關係。節點之間的所有連接都是雙向的。EF與導航屬性的多對多關係

因此我有節點的表:

NodeId | NodeName 
    1   A 
    2   B 
    3   C 
    4   D 

和節點鏈接的列表:

LeftNodeId | RightNodeId 
    1    2 
    1    4 
    2    3 
    3    4 

因此,大家可以看到,我圖的樣子:

A - B - C 
|  | 
---D--- 

當我將它拉入EF模型時,我的Node對象將具有兩個導航屬性 - 節點和節點1。節點將包含「左」節點,而節點1將包含「右」節點。

我的問題是如何最好地設置SQL數據庫,以便我只有一個導航屬性,例如相鄰節點的「鄰居」?

我的節點之間的關係總是雙向的。

回答

1

這是「不可能的」。 EF要求分開維護兩種導航屬性。例如,如果有節點2,則一個屬性將包含2和3之間的關係(因爲2在左側),而第二個導航屬性將包含1和2之間的關係(因爲2在右側)。

如果你需要展示你可以使用非映射的計算財產所有關係單個屬性:

public IEnumerable<Node> AllRelations 
{ 
    get 
    { 
     return LeftRelations.Concat(RightRelations); 
    } 
} 
+0

感謝拉吉斯拉夫。那麼真的沒有最佳的方法來設置SQL中的表或關係? – Zac 2012-01-13 10:35:21

+0

這不是關於SQL,而是關於EF中聯結表的解釋。 – 2012-01-13 10:46:33