4

我有关于实体框架模型关系的设计问题

我在 edmx 中有这个模型 EF图

业务规则:

AParticipant可以有多个Roles,因此我创建了一个关系表,该表在 和表ParticipantRoles上具有一对多关系ParticipantRole

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

在此处输入图像描述

问题:

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

4

1 回答 1

2

你说AParticipant可以有多个Roles。当然,aRole可以有多个Participants。所以基本上这是一个多对多的关联。

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

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

这是你可以做的:

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

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

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

于 2013-11-12T20:57:32.030 回答