[NHibernate] Как я могу сопоставить несколько типов объектов в одну таблицу? - PullRequest
1 голос
/ 07 июня 2009

Моя объектная модель представляет канал подкаста с данными канала и элементами канала (отдельными подкастами). Это структурировано следующим образом:

PodcastFeed
    ChannelData // Property on PodcastFeed
        ITunesChannelData // Property on ChannelData
    FeedItems // Property on PodcastFeed; collection of PodcastFeedItems

PodcastFeedItem
    ITunesItemData // Property on PodcastFeedItem

В моей базе данных поля PodcastFeed, ChannelData и ITunesChannelData хранятся в одной таблице; в равной степени поля в PodcastFeedItem и ITunesItemData хранятся в одной таблице. От PodcastFeed до PodcastFeedItem существует отношение один ко многим. Причина их сохранения заключается в том, что существует взаимно-однозначное сопоставление между различными типами объектов (например, ChannelData уникальна для каждого канала подкаста).

Я согласен с отображением PodcastFeed в PodcastFeedItem, но я не могу понять, как это сделать, как разделить данные в таблице Feeds на различные классы, составляющие PodcastFeed. Я успешно создал сопоставления NHibernate из таблицы Feeds для этих типов, но когда я обращаюсь к объекту PodcastFeed, свойство ChannelData имеет значение null. Предположительно это происходит потому, что NHibernate не знает, как создать иерархию, как описано выше.

FWIW, я попытался выполнить следующую строку в моем файле сопоставления безуспешно (NHibernate пытается загрузить данные из несуществующего столбца «ChannelData» в таблице).

<property name="ChannelData" type="ChannelData" />

Нужно ли мне создавать пользовательский тип в NHibernate, чтобы включить это, или мне не хватает какого-то встроенного трюка?

Ответы [ 2 ]

2 голосов
/ 07 июня 2009

Способ решить эту проблему - использовать сопоставление компонентов . Элемент отображения <component /> позволит использовать столько типов отображения, сколько доступно на уровне <class />, что позволяет выполнять сложные сценарии.

0 голосов
/ 07 июня 2009

То, что вы ищете, это TPH, таблица на иерархию, отображение. Здесь у вас есть одна таблица в базе данных, сопоставленная с иерархией объектов, дифференцированных по какому-то ключу.

Следующая документация должна быть полезной: https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...