我有一个关于 Entity Framework 模型关系的设计问题

我在 edmx 中有这个模型

业务规则:

一个 Participant 可以有多个 Roles,所以我创建了一个关系表 ParticipantRoles,它在 ParticipantRole 表上有一对多的关系

问题 :
为了获得参与者的角色值,我必须深入了解 Participant->ParticipantRole->Role(请参阅下面的 JSON 输出)

问题:

在EF中,如何设计表关系绕过ParticipantsRole表。我想以类似 Particant.Role 而不是 Participant.ParticipantsRole.Role 的方式访问角色

最佳答案

你说 A Participant 可以有多个 Role s。当然,一个 Role 可以有多个 Participant 。所以基本上这是一个多对多的关联。

当联结表只有两个外键时,Entity Framework 只会映射纯多对多关联(没有连接类)。在您的情况下,如果表 ParticipantsRole 在生成模型时只有一个由 ParticipantIdRoleId 组成的主键,则不会创建类 ParticipantsRole 。您本来可以将 Participant.RolesRole.Participants 作为导航属性。

但是,模型是用 ParticipantsRole 生成的,你想摆脱它。 (或者不,我会回到那个)。

这是你可以做的:

  • 从类图中删除 ParticipantRoles
  • 修改数据库表 ParticipantRoles 使其只有两个 FK 列,它们都构成主键。
  • 从数据库更新模型并在 Add 选项卡中选择 ParticipantsRole

  • 这应该为您提供一个具有纯多对多关联的模型。

    但是,在执行此操作之前请三思。 M2m 协会有一种方式可以演变为 1-m-1 协会(正如您现在所拥有的)。原因是迟早会觉得需要记录关于关联的数据,所以联结表必须有更多的字段,不再是纯粹的联结表。在你的情况下,我可以想象有一天参与者的角色必须有一个固定的顺序,或者一个标记为默认的。在生产环境中将 m2m 关联更改为 1-m-1 可能是一次重大改革。 - 需要考虑的事情...

    关于sql - Entity Framework : One to Many relationship,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19919243/

    10-12 23:31