将实体映射到与 EF5 的三元关系的最佳方法是什么?
例如,三个实体:
Bike
Crash
Person
那么就会有一个三元关系要知道:
- 撞车的那个人的自行车 X
- 参与自行车 X 和 Y 之间的碰撞 X 的人员
- 骑自行车 B 的人 A 发生了哪些事故
等等
我应该如何创建我的实体?是为三元关系创建新实体的唯一可能性吗?
将实体映射到与 EF5 的三元关系的最佳方法是什么?
例如,三个实体:
Bike
Crash
Person
那么就会有一个三元关系要知道:
等等
我应该如何创建我的实体?是为三元关系创建新实体的唯一可能性吗?
选项1
假设有些Person-Bike
组合可以在没有Crash
es 的情况下存在(谢天谢地)。因此,您可以创建PersonBike
具有 FK 与人和自行车的二元关系(联结表),假设自行车不属于特定人员。EF 可以在模型中没有关联类的情况下处理这种多对多关系。
然后,太糟糕了,Person-Bike 组合可能会导致崩溃。一次崩溃中可能有两种以上的组合。基本上你可以PersonBikes
在Crash
. 在那种情况下,模型中根本就没有关联类。但是,如果您想了解更多关于 和 之间的关联Crash
,PersonBike
例如谁对崩溃有罪,则需要两者之间的联结表:CrashPersonBike
带有 FK 的 toCrash
和PersonBike
一个或多个描述关联的字段(如有罪是/否)。这将需要 EF 模型中的关联类。
选项 2
Bikes 有特定的所有者(人):让我们Person
有一个Bikes
集合(表 Bike 对 Person 有一个 FK)。现在只用涉及的自行车来描述碰撞就足够了,因为自行车决定了人。因此Crash
可以有一个Bikes
集合(同样:模型中没有关联类)或CrashBike
包含更多详细信息的关联类,如上所述。
选项 3
一个“真正的”三元关系,需要模型中的关联类 ( CrashPersonBike
),有或没有额外的细节。
在所有情况下,您都需要业务逻辑来防止同一个人(或选项 1 和 3 中的自行车)卷入一次车祸。选项 1 和 2 的另一个好处是模型可以描述除碰撞之外的人-自行车组合。应该是 1 还是 2 取决于自行车人的所有权。