将实体映射到与EF5的三元关系的最佳方式是什么?如何建立三元关系
例如,三个实体:
Bike
Crash
Person
然后会有一个三元关系,要知道:
- 自行车其中的人却在崩溃介入X
- 的人自行车X和Y之间的碰撞X
- 涉及自行车B上的人A的碰撞事故
等
我该如何创建我的实体? 是为三元关系创建一个新实体的唯一可能性吗?
将实体映射到与EF5的三元关系的最佳方式是什么?如何建立三元关系
例如,三个实体:
Bike
Crash
Person
然后会有一个三元关系,要知道:
等
我该如何创建我的实体? 是为三元关系创建一个新实体的唯一可能性吗?
选项1
假设有,可以在不Crash
ES存在Person-Bike
组合(感谢神)。因此,假设自行车不属于特定人员,那么您可以创建具有FK的人与自行车的二元关系(路口表)PersonBike
。 EF可以处理这种多对多的关系,而不需要模型中的关联类。
然后,太糟糕了,人 - 自行车组合可能会涉及到崩溃。一次崩溃中可能有两种以上的组合。基本上你可以在Crash
有一个集合PersonBikes
。在这种情况下,模型中根本没有关联类。但是,如果您想了解更多关于Crash
与PersonBike
之间的关联的信息,例如谁是有罪的崩溃,你需要两个之间的联合表:CrashPersonBike
与FK的Crash
和PersonBike
和一个或多个字段描述的关联(如有罪是/否)。这将需要EF模型中的关联类。
选项2辆
自行车有具体的所有者(人):让Person
有Bikes
集合(表自行车有一个FK对个人)。现在只需用自行车来描述碰撞就足够了,因为自行车决定着人。因此,Crash
可以具有Bikes
集合(再次:模型中不存在关联类)或包含如上所述更多细节的关联类CrashBike
。
选项3
,需要在模型关联类(CrashPersonBike
),有或没有额外的详细信息的“真”的三元关系。
在所有情况下,您都需要业务逻辑来防止同一人(或选项1和3中的自行车)卷入一次事故。选项1和2具有额外的好处,因为除了崩溃之外,该模型可以描述人 - 自行车组合。是否应该是1或2取决于自行车人的所有权。
格特,非常感谢您的详细解答!现在这将是一个考虑哪个更适合我的应用程序的问题。 – polonskyg
嘿,我想了解如何管理选项1(在'Crash'中有一个'PersonBike'集合)和“模型中没有关联类”。如果我将'PersonBike''FK'给'Crash','PersonBike'成为一个实体,并且我失去了'Person'和'Bike'之间的直接多对多关系。有没有办法避免这种情况?顺便说一句,我使用EF4。 – nmclean