2009-03-01 6 views
0

J'ai essayé de créer un objet SiteMapNode de style avec des mappages NHibernate. L'objectif consiste à imiter l'objet ASP.NET SiteMapNode afin qu'un fournisseur personnalisé puisse être créé à l'aide de NHibernate pour un backend dynamique.Mappage des frères et sœurs dans NHibernate

Le problème que je rencontre est la façon dont la nature de l'arborescence d'un plan de site. L'objet ASP.NET a un objet frère suivant et précédent. C'est bien et bien. Je ne voulais pas avoir un NextSiblingId et PreviousSiblingId dans ma table SiteMapNode. J'ai décidé que lorsque j'afficherais ces objets, il serait bon d'avoir une propriété OrdinalPosition. Après la recherche, il semble que je ne puisse pas faire de mappage de propriété NextSibling et PreviousSibling dans NHibernate. Ma pensée pour résoudre ceci est de faire une collection de Siblings. Cette collection aurait le même ParentNodeId que l'objet propriétaire.

Est-ce possible?

Voici le fichier de mappage que je suis venu avec jusqu'à présent:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="AthletesCafe.Core.Domain.System.SiteMap" assembly="AthletesCafe.Core"> 

    <class name="SiteMapNode" table="SiteMapNode" lazy="true" > 

    <id name="ID" type="Int32" unsaved-value="0"> 
     <column name="ID" not-null="true" unique="true" index="PK_SiteMapNode"/> 
     <generator class="identity" /> 
    </id> 

    <property name="Title" column="Title" type="String" length="255" not-null="true" /> 
    <property name="Description" column="Description" type="String" not-null="false" /> 

    <property name="Url" column="Description" type="String" not-null="true" length="1000" /> 

    <property name="Key" column="NodeKey" type="String" not-null="true" length="255" /> 

    <property name="OrdinalPosition" column="OrdinalPosition" type="Int32" not-null="true" /> 

    <property name="ReadOnly" column="ReadOnly" not-null="true" type="System.Boolean" /> 

    <property name="IsExternal" column="IsExternal" not-null="true" type="System.Boolean" /> 

    <many-to-one name="ParentNode" column="ParentNodeId" class="AthletesCafe.Core.Domain.System.SiteMap.SiteMapNode, AthletesCafe.Core" 
       access="field.pascalcase-underscore" not-null="false" /> 

    <bag name="Siblings" access="field.pascalcase-underscore" inverse="true" lazy="true"> 
     <key column="ParentNodeId" /> 
     <many-to-many foreign-key="ParentNodeId" class="AthletesCafe.Core.Domain.System.SiteMap.SiteMapNode, AthletesCafe.Core" /> 
    </bag> 

    <bag name="ChildNodes" generic="true" inverse="true" lazy="true" access="field.pascalcase-underscore"> 
     <key column="ParentNodeId" /> 
     <one-to-many class="AthletesCafe.Core.Domain.System.SiteMap.SiteMapNode, AthletesCafe.Core"/> 
    </bag> 

    </class> 
</hibernate-mapping> 

Le sac de frères et soeurs retourne la même chose que la collection ChildNodes. Je ne comprends tout simplement pas comment fonctionnent les propriétés clés et les clés étrangères. J'ai pensé que la propriété column de l'élément key disait à nHibernate d'utiliser cette colonne sur l'objet owner pour mapper la colonne de l'objet étranger. Je dois juste savoir comment faire pour que nHibernate regarde le ParentNodeId sur les nœuds de la collection. Quelqu'un peut-il aider?

Répondre

0

Découvrez ce blog: How to map a tree in NHibernate

+0

J'ai trouvé ce poste avant. Je l'ai lu à l'origine lorsque je cherchais le problème frère/sœur suivant/précédent. Il n'aborde toujours pas les nœuds au même niveau que l'objet actuel. Je me demande si c'est quelque chose où je dois obtenir le parent et ensuite ce sont les enfants. –

Questions connexes