2010-06-09 3 views
0

J'ai un objet appelé MyItem qui référence les enfants dans le même élément. Comment puis-je configurer un fichier de mappage nhibernate pour stocker cet élément?nHibernate de stockage d'un objet avec auto-référencement de nombreux enfants et de nombreux parents

public class MyItem 
{ 
    public virtual string Id {get;set;} 
    public virtual string Name {get;set;} 
    public virtual string Version {get;set;} 
    public virtual IList<MyItem> Children {get;set;}  
} 

donc à peu près la hbm.xml serait:

<class name="MyItem" table="tb_myitem"> 
    <id name="Id" column="id" type="String" length="32"> 
    <generator class="uuid.hex" /> 
    </id> 
    <property name="Name"  column="name" /> 
    <property name="Version" column="version" /> 
    <bag name="Children" cascade="all-delete-orphan" lazy="false"> 
    <key column="children_id" /> 
    <one-to-many class="MyItem" not-found="ignore"/> 
    </bag>  
</class> 

Cela ne fonctionnerait pas, je ne pense pas. Peut-être que j'ai besoin de créer une autre classe, dites MyItemChildren et l'utiliser comme membre enfants, puis faire le mapping dans cette classe?

Cela voudrait dire avoir deux tables. Une table contient le MyItem et l'autre table contient des références de mon article. REMARQUE: un élément enfant peut avoir plusieurs parents.

Répondre

0

Je travaille pour charger les objets avec impatience.

Je peux charger l'objet 'MyItem' et avec lui les objets 'MyItem' enfants (Dependent).

Ce qui suit est ma classe C#

using Iesi.Collections.Generic; 

namespace Sample 
    { 
    public class MyItem 
     { 
     public virtual string Id { get; set; } 
     public virtual string Name { get; set; } 
     public virtual string Version { get; set; } 

     public virtual ISet<MyItem> Dependants { get; set; } 

     } 
    } 

Dependants sont la collection des enfants qui dépendent de la société mère. Chaque MyItem aura beaucoup d'enfants MyItem. Ceux-ci sont stockés dans un IESI ISet <>.

Le fichier de mappage de mise en veille prolongée est:

<class name="Sample.MyItem, Sample" table="myitem"> 
     <id name="Id" column="id" type="String" length="32"> 
     <generator class="uuid.hex" /> 
     </id> 

     <property name="Name"  column="name"  type="String" length="80"/> 
     <property name="Version" column="version" type="String" length="25"/> 

     <set name="Dependants" table="myitemhierarchy" > 
     <key column="parentid" /> 
     <many-to-many class="Sample.MyItem, Sample" column="childid" /> 
     </set> 
    </class> 

Cet article a contribué énormément: http://web.archive.org/web/20090806071731/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/05/14/how-to-map-a-tree-in-nhibernate.aspx

Questions connexes