实体框架:一对多关系

时间:2013-11-12 01:25:56

标签: sql json entity-framework database-design relational-database

我对实体框架模型关系存在设计问题

我在edmx中有这个模型 EF Diagram

业务规则:

Participant可以包含多个Roles,因此我在ParticipantRolesParticipant上创建了一对多关系的关系表Role

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

enter image description here

问题:

在EF中,如何设计表关系以绕过ParticipantsRole表。我希望以Particant.Role而不是Participant.ParticipantsRole.Role

之类的方式访问角色

1 个答案:

答案 0 :(得分:2)

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

当联结表只有两个外键时,实体框架将只映射纯多对多关联(没有连接类)。在您的情况下,如果表格ParticipantsRole在生成模型时只有ParticipantIdRoleId 的主键,则为ParticipantsRole 1}}不会被创建。您可以使用Participant.RolesRole.Participants作为导航属性。

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

这是你可以做的:

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

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

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