Как я должен отобразить отношения между несколькими моделями наследования? - PullRequest
3 голосов
/ 12 марта 2012

У меня есть модель Eentity Framework с таблицей на иерархию (бренд), а также таблицей на тип (транспортное средство) наследование, как это:

enter image description here

(Vehicle и Brand - абстрактные классы).

Пока все хорошо, я могу получить доступ к производным сущностям по запросам linq, используя метод Vehicle.OfType<> или Brand.OfType<>.

Теперь сущность Бренда является одной из многих связанных с Транспортным средством в моей концептуальной модели, поэтому вопрос заключается в том, как мне установить отношения на модели EF, чтобы я мог продолжать использовать свойства навигации между Транспортным средством и Брендом, но в то же времячтобы сохранить последовательность наследования TPH для бренда ?, мой первый подход состоял в том, чтобы связать только производные предложения, например:

enter image description here

Но если я сделаю это, у меня не будет доступа кМарка непосредственно из Vehicle, поэтому мне нужно сделать двойное отношение (между производным и базовым), например:

enter image description here

Это работает для меня сейчас, но у меня все еще есть дубликатотношения как-то, верно? у вас есть лучший подход? я делаю какую-то глупую ошибку в моем моделировании?

1 Ответ

1 голос
/ 03 мая 2012

Мне кажется, что причина того, что вы сталкиваетесь с перекрестными ссылками в вашей модели, заключается в том, что вы искусственно разделяете Бренд и Транспортное средство как родственные объекты высшего уровня.Если вы начнете с Brand , который, по сути, эквивалентен Make , он станет истинной сущностью верхнего уровня.Нет необходимости отделять Марка для каждого типа транспортного средства (автомобиль, мотоцикл, грузовик и т. Д.);просто представьте сущность Модель между Марка и Транспортное средство , и я думаю, что это решит большинство ваших проблем сшивки.

Тогда отношения не будутне только родитель-ребенок, но более точный состав.Таким образом, у вас есть Make , который имеет составное отношение один-ко-многим с Model , который, в свою очередь, имеет составное отношение один-ко-многим к Vehicle ,Транспортные средства - это экземпляры модели Model , так что в действительности там также нет родительско-дочерних отношений.С этой структурой нет необходимости разветвлять EF для каждого типа Vehicle , потому что это только часть того, что описывается сущностью Model .

Я надеюсь, что мой ответ полезен, и что я не упустил ни одного из основных моментов того, что вы пытаетесь смоделировать -

...