2012-01-13 29 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オブジェクトに2つのナビゲーションプロパティ(ノードとNode1)があります。ノードは「左」ノードを含み、ノード1は「右」ノードを含む。

私の質問は、私が1つのナビゲーションプロパティしか持たないようにSQLデータベースをセットアップするにはどうすればいいですか?近隣ノードの「近隣」

ノード間の私の関係は、常に双方向です。

答えて

1

「不可能」です。 EFは、両方のナビゲーション特性を別々に維持することを要求する。たとえば、ノード2を使用している場合は、1つのプロパティに2と3の間のリレーションが含まれ(2が左側にあるため)、2つ目のナビゲーションプロパティには1と2の間のリレーションが含まれます(2が右側にあるため)。

あなたはすべての関係を示す単一のプロパティが必要な場合は、非マッピングされた計算されたプロパティを使用することができます。

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

おかげラディスラフ。 SQLではテーブルやリレーションシップを設定する最適な方法は本当にありません。 – Zac

+0

EFでは接合テーブルの解釈についてはSQLではありません。 –