sql – 实体框架:一对多关系

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

我在edmx中有这个模型

业务规则:

参与者可以有多个角色,因此我创建了一个关系表ParticipantRoles,它在Participant和Role表上具有1对多的关系

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

问题:

在EF中,如何设计表关系以绕过ParticipantsRole表.我想访问像Particant.Role这样的角色而不是Participant.ParticipantsRole.Role

最佳答案 你说A参与者可以有多个角色.当然,角色可以有多个参与者.所以基本上这是一个多对多的关联.

当联结表只有两个外键时,实体框架将只映射纯多对多关联(没有连接类).在您的情况下,如果表ParticipantsRole在生成模型时只有一个由ParticipantId和RoleId组成的主键,则不会创建类ParticipantsRole.您可以将Participant.Roles和Role.Participants作为导航属性.

但是,该模型已使用ParticipantsRole生成,您想要摆脱它. (或者不,我会回到那个).

这是你可以做的:

>从类图中删除ParticipantRoles.
>修改数据库表ParticipantRoles,使其只有两个FK列,它们都构成主键.
>从数据库更新模型,然后在“添加”选项卡中选择ParticipantsRole.

这应该为您提供一个纯粹的多对多关联的模型.

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

点赞