Как мне сопоставить отношение один-ко-многим через таблицу соединений? - PullRequest
0 голосов
/ 24 февраля 2010

Как бы я описал следующее в NHibernate?
Мои сущности и ERD находятся ниже. Я знаю, как отобразить отношение многие-многие, но не знаю, как сопоставить соединительную таблицу ReportTargets с таблицей Datapoint. Вы заметите, что не существует модели сущностей ReportTargets, поскольку она не является строго сущностью домена. Какое лучшее решение здесь? Я новичок NHibernate, так что, пожалуйста, будьте спокойны .. :) Спасибо

http://img341.imageshack.us/img341/3769/entities.gif

1 Ответ

1 голос
/ 24 февраля 2010

Поскольку у MarketReport.Targets есть таблица соединений, отобразите ее как «многие ко многим».

<class name="MarketReport">
  <id column="reportid" />
  <bag name="ReportTargets" table="reporttargets">
    <key column="marketreportid"/>
    <many-to-many column="targetid" class="Target"/>
  </bag>
</class>

<class name="Target">
  <id column="targetid" />
  <bag name="DataPoints" inverse="true">
    <key column="targetid"/>
    <one-to-many class="DataPoint"/>
  </bag>
</class>

<class name="DataPoint">
  <id column="datapointid" />
</class>

Исходя из вашего последнего комментария, вы хотите либо троичная ассоциация , либо коллекция компонентов . Я включил оба отображения.

<class name="MarketReport">
    <id column="reportid" />
    <map name="ReportTargets" table="reporttargets">
        <key column="marketreportid"/>
        <index-many-to-many column="targetid" class="Target"/>
        <many-to-many column="datapointid" class="DataPoint"/>
    </map>
</class>

<class name="MarketReport">
    <id column="reportid" />
    <bag name="ReportTargets" table="reporttargets">
        <key column="marketreportid"/>
        <composite-element class="ReportTarget">
            <many-to-one name="Target" column="targetid"/>
            <many-to-one name="DataPoint" column="datapointid"/>
        </composite-element>
    </bag>
</class>

<class name="Target">
    <id column="targetid" />
</class>

<class name="DataPoint">
    <id column="datapointid" />
</class>
...