2009-03-01 13 views
0

Ich habe versucht, ein SiteMapNode-Stilobjekt mit NHibernate-Zuordnungen zu erstellen. Das Ziel besteht darin, das ASP.NET-SiteMapNode-Objekt nachzuahmen, sodass ein benutzerdefinierter Anbieter mithilfe von NHibernate für ein dynamisches Back-End erstellt werden kann.Zuordnen von Geschwistern in NHibernate

Das Problem, in das ich hineingeraten bin, ist die Art und Weise, wie die Baumnatur einer Sitemap aussieht. Das ASP.NET-Objekt hat ein nächstes und ein vorheriges Geschwisterobjekt. Das ist gut und gut. Ich wollte keine NextSiblingId und PreviousSiblingId in meiner SiteMapNode-Tabelle haben. Ich entschied, dass wenn ich diese Objekte anzeigen würde, wäre es gut, eine OrdinalPosition-Eigenschaft zu haben. Nach der Recherche scheint es, als könnte ich in NHibernate kein NextSibling und PreviousSibling Property Mapping erstellen. Mein Gedanke, dies zu beheben, besteht darin, eine Geschwisterkollektion zu erstellen. Diese Auflistung hätte dieselbe ParentNodeId wie das Eigentümerobjekt.

Ist das möglich?

Hier ist die Mapping-Datei, die ich mit so weit habe kommen:

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

Die Geschwister Tasche die gleiche Sache wie die Childnodes Sammlung zurück. Ich verstehe nur nicht, wie die Eigenschaften des gesamten Schlüssels und des Fremdschlüssels funktionieren. Ich dachte mir, dass die column -Eigenschaft des Schlüsselelements nHibernate anweist, diese Spalte für das Eigentümerobjekt zu verwenden, um sie der Spalte des fremden Objekts zuzuordnen. Ich muss nur herausfinden, wie nHibernate die ParentNodeId auf den Knoten der Sammlung aussehen lässt. Kann jemand helfen?

Antwort

0

Schauen Sie sich dieses Blog-Post: How to map a tree in NHibernate

+0

ich vor diesem Post gefunden habe. Ich habe es ursprünglich gelesen, als ich nach dem nächsten/vorherigen Geschwisterproblem suchte. Es adressiert immer noch keine Knoten auf der gleichen Ebene wie das aktuelle Objekt. Ich frage mich, ob es etwas ist, wo ich die Eltern bekommen muss, und dann sind es Kinder. –

Verwandte Themen