我有一个关于 Entity Framework 模型关系的设计问题
我在 edmx 中有这个模型
业务规则:
一个 Participant
可以有多个 Roles
,所以我创建了一个关系表 ParticipantRoles
,它在 Participant
和 Role
表上有一对多的关系
问题 :
为了获得参与者的角色值,我必须深入了解 Participant->ParticipantRole->Role
(请参阅下面的 JSON 输出)
问题:
在EF中,如何设计表关系绕过ParticipantsRole表。我想以类似 Particant.Role
而不是 Participant.ParticipantsRole.Role
的方式访问角色
最佳答案
你说 A Participant
可以有多个 Role
s。当然,一个 Role
可以有多个 Participant
。所以基本上这是一个多对多的关联。
当联结表只有两个外键时,Entity Framework 只会映射纯多对多关联(没有连接类)。在您的情况下,如果表 ParticipantsRole
在生成模型时只有一个由 ParticipantId
和 RoleId
组成的主键,则不会创建类 ParticipantsRole
。您本来可以将 Participant.Roles
和 Role.Participants
作为导航属性。
但是,模型是用 ParticipantsRole
生成的,你想摆脱它。 (或者不,我会回到那个)。
这是你可以做的:
ParticipantRoles
。 ParticipantRoles
使其只有两个 FK 列,它们都构成主键。 ParticipantsRole
。 这应该为您提供一个具有纯多对多关联的模型。
但是,在执行此操作之前请三思。 M2m 协会有一种方式可以演变为 1-m-1 协会(正如您现在所拥有的)。原因是迟早会觉得需要记录关于关联的数据,所以联结表必须有更多的字段,不再是纯粹的联结表。在你的情况下,我可以想象有一天参与者的角色必须有一个固定的顺序,或者一个标记为默认的。在生产环境中将 m2m 关联更改为 1-m-1 可能是一次重大改革。 - 需要考虑的事情...
关于sql - Entity Framework : One to Many relationship,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19919243/