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