【问题标题】:Using a single mapping table for multiple many-to-many relationships对多个多对多关系使用单个映射表
【发布时间】:2016-02-15 05:10:58
【问题描述】:

我需要将多个多对多关系存储在单个表中以用于 EntityFramework。

在这个需求中有很多m2m关系,但是举个例子,有:

实体 实体组 地址

每个 Entity 可以链接到多个 Address 记录,每个 Entity 可以链接到多个 EntityGroup 记录。我想使用一个表来管理这些对象之间的关系——比如:

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

在上面的例子中,EntityGroup“1”包含两个实体,ID分别为“74”和“83”,而Entity“74”的地址为“17”。

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

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 通过表中的列查找关系在使用 RDBMS 时是一个非常糟糕的选择。使用 RDBMS,您基本上抛弃了它真正擅长的 切割器 方法来创建表之间的关系。
  • 坏主意 - 您将破坏参照完整性、优化技术等以避免拥有多个表。
  • 虽然我意识到这不是“最佳实践”,但恕我直言,我正在寻找一个潜在的解决方案。如果对象之间的链接正确存储在表中,则不会破坏参照完整性。
  • @TwistedMell​​ow 这个结构对你有什么作用?能否就此给出结论?

标签: c# sql .net entity-framework


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 2014-08-17
    • 2021-12-19
    • 1970-01-01
    • 2020-09-27
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多