NHibernate Сопоставление свойства подкласса с другим объектом через внешний ключ - PullRequest
0 голосов
/ 10 мая 2011

Я работаю над существующей структурой данных, которая не идеальна, и у меня есть проблема с отображением наследования.

Я использую таблицу для каждой иерархии и имею подклассы с установленными дискриминаторами. Однако подклассовые свойства являются внешними ключами к другим таблицам. Как настроить сопоставление подклассов так, чтобы при запросе свойства fk я получал объект, а не ноль? Это вообще возможно?

Мое текущее отображение

<?xml version="1.0" encoding="utf-8" ?>
      <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MVC3" namespace="MVC3.Models">
  <class name="Image" table="Images">
<id name="Id" column="ImageId">
  <generator class="identity" />
</id>
<discriminator column="ImageType" />
<property name="Url" column="Url" not-null="true" />
<property name="Caption" column="Caption" />
<subclass name="AupairImage" discriminator-value="AupairImage">
  <join table="Aupairs" inverse="true">
    <key column="AupairId" />
    <many-to-one name="Aupair" column="AupairId" class="Aupair" />
  </join>
</subclass>
<subclass name="FamilyImage" discriminator-value="FamilyImage">
  <join table="Families" inverse="true">
    <key column="FamilyId" />
    <many-to-one name="Family" column="FamilyId" class="Family" />
  </join>      
</subclass>

Я хотел бы добавить диаграмму сущностей, но пока не могу опубликовать изображения: 0 (

Но внешние ключи AupairId и FamilyId связаны с двумя другими таблицами и имеют тип int 32

Я знаю, что было бы лучше реструктурировать сущности Aupair и Family, чтобы иметь иерархию, позволяющую избавиться от иерархии на изображениях, но это будет последним средством из-за существующего кода.

Заранее благодарен за любую помощь, оцененную экспертами по картографированию ...

1 Ответ

0 голосов
/ 18 мая 2011

Понял, что я делал неправильно после второго взгляда, должен был просто использовать Many-To-One в подклассе с определенным столбцом

    <subclass name="MVC3.Models.FamilyImage, MVC3" discriminator-value="FamilyImage">
     <many-to-one cascade="all" class="MVC3.Models.Family, MVC3" name="Family">
        <column name="FamilyId" />
      </many-to-one>
    </subclass>
...