2012-03-12 80 views
3

我有一個表每一個分層(品牌)的Eentity框架模型,也是一個表每種類型(車輛)繼承這樣的:如何映射多個繼承模型之間的關係?

enter image description here

(車輛和品牌是抽象類) 。

到目前爲止,我可以使用Vehicle.OfType<>Brand.OfType<>方法訪問linq查詢上的派生實體。

現在,Brand實體與我的概念模型中的Vehicle有很多關係,所以問題是,我應該如何在EF模型上建立關係,這樣我才能繼續使用Vehicle和Brand之間的導航屬性,但同時保持對品牌的TPH繼承的一致性?我的第一種方法是隻涉及衍生clases,如:

enter image description here

但如果我這樣做,我必須直接從汽車品牌沒有進入,所以我會必須做一個雙重關係(派生和基地之間),如:

enter image description here

這對我來說現在可行,但我仍然有一個重複的關係莫名其妙,是否有更好的方法?,我在我的建模上犯了一些愚蠢的錯誤?

+0

唱反調的問題是什麼的基本點:什麼樣的品牌是本田?恕我直言,你在這裏過度使用繼承。 – 2012-03-13 12:03:57

+0

我知道有品牌同時擁有(汽車和摩托車),但在這種情況下,我們希望將它們區分爲「本田汽車」和「本田拜克斯」,這就是爲什麼您認爲是過度使用? – Milox 2012-03-13 15:46:51

+1

因爲對象只能有一種類型。即使你認爲這對本田來說也是合適的,但對任何地方的每個品牌來說都是不對的。使用類型作爲單個業務屬性的標誌,可以將您帶入難以發展架構的角落。我將這個模型作爲一個關聯進行建模:[品牌:Honda]與[CarBrand:HondaCars]相關(即2個實例,而不是層次結構)。那麼你可以將基數從1:1更改爲1:*,如果你想擁有一個可以包含兩者的品牌。 – 2012-03-13 18:11:02

回答

1

在我看來,你正在運行到模型中的交聯的原因是因爲你被人爲分離品牌車輛作爲頂級兄弟實體。如果您從品牌開始,這看起來基本上等於使成爲真正的頂級實體。對於每種車型(汽車,摩托車,卡車等),不需要分開製造;只需介紹實體模型之間使車輛和我認爲,解決了大多數交聯問題。

然後,這些關係不是嚴格的親子關係,但作爲構成更準確。所以你有製造,它與模型有一個一對多的複合關係,它與車輛有一個一對多的複合關係。車輛是實例模型,所以在那兒也沒有真正的親子關係。有了這種結構,就不需要爲每種類型的Vehicle分支EF,因爲這只是Model實體描述的部分。

我希望我的回答是有益的,我沒有錯過任何你想型號 -