2010-02-24 3 views
0

Comment pourrais-je cartographier les éléments suivants dans NHibernate?
Mes entités et ERD sont ci-dessous. Je sais comment mapper une relation many-many, mais ne savez pas comment mapper la table de jointure ReportTargets à la table Datapoint. Vous remarquerez qu'il n'existe pas de modèle d'entité ReportTargets car il ne s'agit pas strictement d'une entité de domaine. Quelle est la meilleure solution ici? Je suis un débutant NHibernate nous vous recommandons donc s'il vous plaît .. :) MerciComment mapper une relation un-à-plusieurs via une table de jointure?

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

Répondre

1

Comme MarketReport.Targets a une table de jointure, la carte comme beaucoup à beaucoup.

<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> 

Sur la base de votre dernier commentaire, vous voulez soit voulez un ternary association ou un component collection. J'ai inclus les deux mappings.

<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> 
+0

Salut Lachlan, merci pour l'aide continue. Votre modification récente met en place un lien direct entre Target et DataPoint, comment créeriez-vous le lien via la même table de jointure, par exemple. ReportTargets, qui est utilisé pour le lien many-many entre MarketReport et Target. La logique métier est que de nombreux points de données sont associés à une relation spécifique entre une cible et un rapport de marché. Merci. – Matt

Questions connexes