2010-05-11 4 views
0

Ceci est probablement incroyablement simple, mais je ne peux tout simplement pas voir le bois pour les arbres en ce moment.nHibernate Self Join Mapping

Par souci de concision, je voudrais modéliser un objet de texte, qui a lié les mots à lui (synonymes), Ce faisant, je pourrais avoir les applications suivantes:

<class name="Word" table="bs_word"> 
<id name="Id" column="WordId" type="Int32" unsaved-value="-1"> 
    <generator class="native"> 
    <param name="sequence"></param> 
    </generator> 
</id> 

<property name="Key" column="word" type="String" length="50" /> 
<many-to-one name="SynonymGroup" class="BS.Core.Domain.Synonym, BS.Core" column="SynonymId" lazy="false"/> 


<class name="Synonym" table="bs_Synonym"> 
<id name="Id" column="SynonymId" type="Int32" unsaved-value="-1"> 
    <generator class="native"> 
    <param name="sequence"></param> 
    </generator> 
</id> 
<property name="Alias" column="Alias" type="String" length="50" /> 
<bag name="Words" cascade="none" lazy="false" inverse="true"> 
    <key column="SynonymId" /> 
    <one-to-many class="Word" /> 
</bag> 

Mapping comme cela signifierait pour un mot donné, je peux accéder à des mots connexes (synonymes) comme ceci:

word.SynonymGroup.Words

Cependant, je voudrais savoir s'il est possible de mapper un sac d'objets sur une instance d'un mot objet ... si cela a du sens, donc je peux accéder au mot connexe s comme ceci:

word.Words

J'ai essayé de jouer avec l'élément de carte et des éléments composites, tous sans succès - donc je me demandais si une personne aimable pourrait me diriger dans la bonne direction ?

ta, kmoo01

Répondre

1

Ceci mapper une entité Mot avec une collection de mots (synonymes):

<class name="Word"> 
    <id ...> 
    <generator .../> 
    </id> 
    <set name="Synonyms" cascade="all"> 
    <key /> 
    <many-to-many class="Word" /> 
    </set> 
</class> 

Vous pouvez personnaliser les noms de tables dans les éléments class et set, et la colonne noms dans les éléments key et many-to-many selon les besoins.

Notez que j'ai utilisé set au lieu de bag, car il convient mieux à la sémantique. Vous pouvez le mapper à un ICollection<Word> ou Iesi.Collections.Generic.ISet<Word>.