【发布时间】:2012-05-03 12:09:10
【问题描述】:
我有一个具有 Table Per Hierarchy(品牌)和 Table Per Type(车辆)继承的实体框架模型,如下所示:
(Vehicle 和 Brand 是抽象类)。
到目前为止一切顺利,我可以使用 Vehicle.OfType<> 或 Brand.OfType<> 方法访问 linq 查询中的派生实体。
现在,Brand 实体在我的概念模型上与 Vehicle 是一对多相关的,所以问题是,我应该如何在 EF 模型上建立关系,以便我可以继续使用 Vehicle 和 Brand 之间的导航属性,但同时保持Brand? 上 TPH 继承的一致性,我的第一种方法是仅关联派生类,例如:
但如果我这样做,我无法直接从 Vehicle 访问 Brand,所以我必须做一个双重关系(在派生和基础之间),例如:
现在这对我有用,但不知何故我仍然有重复的关系,对吗?,你有更好的方法吗?,我在建模上犯了一些愚蠢的错误吗?
【问题讨论】:
-
魔鬼代言人提问:本田是个什么样的品牌?恕我直言,您在这里过度使用继承。
-
我知道有些品牌同时拥有(汽车和摩托车),但在这种情况下,我们希望将它们区分为“Honda Car”和“Honda Bykes”,这就是为什么你认为是过度的使用?
-
因为一个对象只能有一种类型。即使您认为这对本田来说是正确的,但也并非对所有品牌都适用。使用类型作为单个业务属性的标志,这样会使您陷入难以发展架构的角落。我会将其建模为关联:[Brand: Honda] 与 [CarBrand: HondaCars] 相关(即 2 个实例而不是层次结构)。然后,如果您想拥有一个可以同时包含两者的品牌,您可以将基数从 1:1 更改为 1:*。
标签: entity-framework inheritance relation