2009-08-03 7 views
0

Je veux mapper mon modèle d'objet à NHibernate. Il y a une partie délicate dans mon concept et je ne sais pas s'il est possible de le faire dans NHibernate.NHibernate - comment mapper la collection d'arbres

Je veux avoir une collection d'arbres. J'ai deux classes (ci-dessous, seules les propriétés importantes indiquées). Le composant est un noeud d'un arbre et ComponentGroup est une collection d'arbres.

public class Component 
{ 
    public Component Parent { get; set; } 
    public IList<Component> SubComponents { get; set; } 
    public ComponentGroup Group { get; set; } 
} 

public class ComponentGroup 
{ 
    public IList<Component> Components { get; set; } 
} 

Maintenant, je veux que chacun des composants de savoir quels ComponentGroup il appartient, donc j'ai besoin de référence de tous les composants à ComponentGroup (propriété du groupe). Mais ComponentGroup ne devrait avoir qu'une collection de nœuds racine (enfants directs) - Collection de composants. Donc, ceci est quelque chose comme un mappage d'un à demi;) "un" côté a seulement référence à certains éléments du côté "plusieurs".

Avez-vous des idées pour mapper quelque chose comme ça en utilisant NHibernate?

Répondre

0

Je vais donner un coup de feu (généré avec FluentNHibernate)

<class name="Component" table="`Component`" xmlns="urn:nhibernate-mapping-2.2"> 
<id name="ComponentId" type="Int32" column="ComponentId"> 
    <generator class="identity" /> 
</id> 
<many-to-one name="Parent" column="ParentId" /> 
<bag name="SubComponents"> 
    <key column="ComponentId" /> 
    <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag> 
<many-to-one name="Group" column="GroupId" /> 

<class name="ComponentGroup" table="`ComponentGroup`" xmlns="urn:nhibernate-mapping-2.2"> 
<id name="Id" type="Int32" column="ComponentGroupId"> 
    <generator class="identity" /> 
</id> 
<bag name="Components"> 
    <key column="ComponentGroupId" /> 
    <one-to-many class="NHibernateTests.Component, NHibernateTests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</bag> 

EDIT:

Si vous voulez que tous vos composants de savoir leur ComponentGroup puis mis sur chacun d'eux ComponentGroup.

Et ComponentGroup si vous voulez que tous les composants de la racine ne puis changer le sac à:

<bag name="Components" where="ParentId is null"> 

de sorte que vous obtenez seulement les composants de la racine

+0

C'est exactement ce que je dois, merci! – kuba53280

+0

Je suis heureux d'avoir pu aider :) – sirrocco

Questions connexes