Как мне отобразить следующее в NHibernate?
Мои объекты и ERD ниже. Я знаю, как сопоставить отношения «многие-многие», но не знаю, как сопоставить соединительную таблицу ReportTargets с таблицей Datapoint. Вы заметите, что здесь нет модели сущностей ReportTargets, поскольку она не является строго доменной сущностью. Какое лучшее решение здесь? Я новичок в NHibernate, так что полегче, пожалуйста.. :) Спасибо
Как сопоставить отношения «один ко многим» через таблицу соединений?
Ответы (1)
Так как 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>
person
Lachlan Roche
schedule
24.02.2010
Привет Лахлан, спасибо за постоянную помощь. Ваше недавнее редактирование устанавливает прямую связь между Target и DataPoint, как бы вы создали ссылку через ту же таблицу соединений, т.е. ReportTargets, который используется для связи «многие-многие» между MarketReport и Target. Бизнес-логика заключается в том, что многие точки данных связаны с определенной взаимосвязью между целью и рыночным отчетом. Спасибо.
- person Matt; 24.02.2010