EF与导航属性有很多很多关系

时间:2012-01-13 10:05:10

标签: sql-server entity-framework many-to-many

我在图表中的节点之间有很多关系。节点之间的所有连接都是双向的。

因此我有一个节点表:

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对象将具有两个导航属性 - 节点和Node1。节点将包含“左”节点,Node1将包含“右”节点。

我的问题是如何最好地设置SQL数据库,以便我只有一个导航属性,例如邻居节点的“邻居”?

节点之间的关系总是双向的。

1 个答案:

答案 0 :(得分:1)

“不可能”。 EF要求单独维护两种导航属性。例如,如果您有节点2,则一个属性将包含2和3之间的关系(因为2位于左侧),第二个导航属性将包含1和2之间的关系(因为2位于右侧)。

如果您需要显示所有关系的单个属性,则可以使用非映射计算属性:

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