繁体   English   中英

实体框架:一对多关系

[英]Entity Framework: One to Many relationship

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

我在edmx中有这个模型 EF图

业务规则:

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

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

在此输入图像描述

问题:

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

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

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

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

这是你可以做的:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM