2

将实体映射到与EF5的三元关系的最佳方式是什么?如何建立三元关系

例如,三个实体:

Bike 
Crash 
Person 

然后会有一个三元关系,要知道:

  1. 自行车其中的人却在崩溃介入X
  2. 的人自行车X和Y之间的碰撞X
  3. 涉及自行车B上的人A的碰撞事故

我该如何创建我的实体? 是为三元关系创建一个新实体的唯一可能性吗?

回答

2

选项1

假设有,可以在不Crash ES存在Person-Bike组合(感谢神)。因此,假设自行车不属于特定人员,那么您可以创建具有FK的人与自行车的二元关系(路口表)PersonBike。 EF可以处理这种多对多的关系,而不需要模型中的关联类。

然后,太糟糕了,人 - 自行车组合可能会涉及到崩溃。一次崩溃中可能有两种以上的组合。基本上你可以在Crash有一个集合PersonBikes。在这种情况下,模型中根本没有关联类。但是,如果您想了解更多关于CrashPersonBike之间的关联的信息,例如谁是有罪的崩溃,你需要两个之间的联合表:CrashPersonBike与FK的CrashPersonBike和一个或多个字段描述的关联(如有罪是/否)。这将需要EF模型中的关联类。

选项2辆

自行车有具体的所有者(人):让PersonBikes集合(表自行车有一个FK对个人)。现在只需用自行车来描述碰撞就足够了,因为自行车决定着人。因此,Crash可以具有Bikes集合(再次:模型中不存在关联类)或包含如上所述更多细节的关联类CrashBike

选项3

,需要在模型关联类(CrashPersonBike),有或没有额外的详细信息的“真”的三元关系。

在所有情况下,您都需要业务逻辑来防止同一人(或选项1和3中的自行车)卷入一次事故。选项1和2具有额外的好处,因为除了崩溃之外,该模型可以描述人 - 自行车组合。是否应该是1或2取决于自行车人的所有权。

+0

格特,非常感谢您的详细解答!现在这将是一个考虑哪个更适合我的应用程序的问题。 – polonskyg

+0

嘿,我想了解如何管理选项1(在'Crash'中有一个'PersonBike'集合)和“模型中没有关联类”。如果我将'PersonBike''FK'给'Crash','PersonBike'成为一个实体,并且我失去了'Person'和'Bike'之间的直接多对多关系。有没有办法避免这种情况?顺便说一句,我使用EF4。 – nmclean