2016-02-15 99 views
1

我有一个要求,用于在EntityFramework中使用单一表中存储多个多对多关系。对多个多对多关系使用单个映射表

有这个要求,许多M2M的关系,而是通过例如突出,主要有:

实体 EntityGroup 地址

每个实体可以链接到多个地址的记录,每个实体可以链接到多个EntityGroup记录。我想用一个表来管理这些对象之间的关系 - 是这样的:

RelationshipType LeftID RightID 
EntityGroupEntity 1   74 
EntityGroupENtity 1   83 
EntityAddress  74  17 

在上面的例子中,EntityGroup“1”包含两个实体“74”和“83”的ID,并实体“74”具有链接到它的地址“17”。

我注意到在Fluent API中有使用MapLeft和MapRight的Mapping选项,但似乎没有办法告诉它在访问列表时要查找哪种关系。这可能吗?我没有任何运气在网上找到我的问题的答案 - 可能是因为我没有正确地问它!

任何帮助,将不胜感激。

谢谢。

+2

在表中使用列查找关系是使用RDBMS的一个非常糟糕的选择。有了RDBMS,你基本上可以抛弃它擅长的* cleaver *方法来创建表之间的关系。 –

+0

坏主意 - 你会破坏参照完整性,优化技术等,以避免有多个表。 –

+0

虽然我意识到这不是什么被归类为“最佳实践”,并且在所有应有的尊重下,我正在寻找一种可能的解决方案。如果对象之间的链接正确存储在表中,则不会破坏参照完整性。 – TwistedMellow

回答

0

您只能在包含多个m2m关系的枚举类型表中添加一列,指示它是否是您引用的EntityGroup或Address。

RelationshipType LeftID RightID Type 
EntityGroupEntity 1   74  1 
EntityGroupENtity 1   83  1 
EntityAddress  74  17  2 

创意工作的其余部分由您决定。无论如何,这是不好的做法(但从我了解你无法控制的要求)。