我有一个带有每个层次结构表(品牌)的Eentity Framework模型,还有一个每种类型的表(车辆)继承,如下所示:
(车辆和品牌是抽象类)。
到目前为止,我可以使用Vehicle.OfType<>
或Brand.OfType<>
方法在linq查询上访问派生实体。
现在,在我的概念模型中,品牌实体是与车辆相关的一对多,所以问题是,我应该如何在EF模型上建立关系,以便我可以继续使用车辆和品牌之间的导航属性,但同时保持在Brand?上TPH继承的一致性,我的第一种方法是仅涉及派生的clases,如:
但是,如果我这样做,我无法直接从车辆访问Brand,所以我必须做双重关系(派生和基础之间),如:
现在这对我有用,但我仍然有某种重复的关系,这是对的吗?你有更好的方法吗?我在造型上犯了一些愚蠢的错误吗?
答案 0 :(得分:1)
在我看来,您在模型中遇到交叉链接的原因是因为您人为地将品牌和车辆分离为顶级兄弟实体。如果您从品牌开始,这似乎基本上等同于制作,那么它就会成为真正的顶级实体。没有必要为每种车型(汽车,摩托车,卡车等)分开制作;只需在制作和广告之间引入实体模型,我认为这可以解决大多数交叉链接问题。
然后关系不是严格的父子关系,而是作为构图更准确。所以你有制作,它与模型有一对多的复合关系,而模型又与车辆<有一对多的复合关系/ strong>即可。车辆是模型的实例,因此那里也没有真正的父子关系。使用此结构,无需为每种类型的 Vehicle 分支EF,因为这只是模型实体所描述的内容的一部分。
我希望我的回答很有帮助,而且我没有错过任何你想要建模的要点 -