NHibernate: отображение объекта типа пользователя в отдельную таблицу - PullRequest
1 голос
/ 27 августа 2010

Давайте начнем с этого отображения:

<component name="Location">
  ...
  <property name="Settings" type="JsonUserType,...">
    <column name="LocationSettingsType" />
    <column name="LocationSettingsData" />
  </property>
</component>

Это соответствует

TABLE Primary (
    ...
    LocationSettingsType,
    LocationSettingsData
    ...
)

и

class Location {
    ...
    object Settings { get; set; }
}

Теперь я хочу извлечь настройки в отдельную таблицу (потому что они редко бывают здесь).
Итак, я получаю

TABLE Primary (
    ...
    LocationSettingsId,
    ...
)

TABLE Settings (
    Id,
    Type,
    Data
)

Могу ли я сохранить свои классы C # такими же?

Обновление: Это не отношения многие-к-одному. Как и раньше, каждое местоположение имеет ноль или одну настройку, и каждая настройка принадлежит не более одной локации.

Ответы [ 3 ]

0 голосов
/ 28 августа 2010

Если вы хотите, чтобы отношения «один ко многим» в таблицах «Основной» и «Настройки», вам сначала нужно установить ограничение внешнего ключа. Затем вы будете использовать свойство bag в XML для сопоставления ваших таблиц. У вас будет entity для каждого стола.

См. Также этот вопрос на Пакет свойств NHibernate / FluentNHibernate .

Я также рекомендую вам приобрести книгу NHibernate 2 для начинающих . Это мне очень помогло.

0 голосов
/ 17 сентября 2013

Это старый вопрос, но у меня была та же проблема, и я искал решение, которое пришел сюда.

элемент component может отображать несколько столбцов на несколько моделей объектов.

элемент join может отображать несколько таблиц в объектную модель.

Основная проблема заключается в том, что хотя component не может отображать столбцы из другой таблицы, к которой принадлежит модель, join не может отображать различные столбцы таблицы в другую объектную модель.

Решение, которое я нашел, состоит в том, чтобы использовать оба для достижения столбца карты другой таблицы для нескольких объектов:

<class name="Primary" table="Primary">
    <id name="Id">
        <generator class="identity"/>
    </id>
    <property name="Name" />
    ...
    <join table="Settings">
        <key column="PrimaryId"/>

        <component name="Location">
          ...
          <property name="Settings" type="JsonUserType,...">
            <column name="LocationSettingsType" />
            <column name="LocationSettingsData" />
          </property>
        </component>
    </join>
</class>

Справка:

Элемент отображения NHibernate Join

Элемент сопоставления компонента NHibernate

0 голосов
/ 28 августа 2010

Я считаю, что самым близким к этому является элемент отображения <map>;подробности объясняются в этой статье .

...