2009-03-01 3 views
0

NHibernateマッピングを使ってSiteMapNodeスタイルのオブジェクトを構築しようとしています。目標は、ASP.NETのSiteMapNodeオブジェクトを模倣して、カスタムプロバイダを動的バックエンド用にNHibernateを使用して構築できるようにすることです。NHibernateで兄弟をマッピングする

私が問題になっているのは、サイトマップのツリーの性質です。 ASP.NETオブジェクトには、次の兄弟オブジェクトと前の兄弟オブジェクトがあります。これは大丈夫です。私は、SiteMapNodeテーブルにNextSiblingIdとPreviousSiblingIdを持つことを望んでいませんでした。私はこれらのオブジェクトを表示するときに、OrdinalPositionプロパティを持つことをお勧めします。研究の後、私はNHibernateでNextSiblingとPreviousSiblingプロパティマッピングを作ることができないようです。これを修正する私の考えは、兄弟コレクションを作ることです。このコレクションは所有者オブジェクトと同じParentNodeIdを持ちます。

これは可能ですか?

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

兄弟バッグはのchildNodesコレクションと同じものを返します。ここでは

は、私がこれまでに作ってみたマッピングファイルです。私はキーと外部キーのプロパティ全体がどのように機能するのか理解していません。キー要素のcolumnプロパティが、nHibernateに、所有者オブジェクトのその列を使用して外部オブジェクトの列にマップするように指示していると考えました。私は、コレクションのノード上のParentNodeIdをnHibernateで調べる方法を見つける必要があります。誰も助けることができますか?

答えて

0
+0

私はこの記事を以前に見つけました。私は元/兄弟の次の問題を捜していたときにそれを最初に読んだ。それでも、現在のオブジェクトと同じレベルのノードは扱われません。私はそれが私が親を得なければならないものであるかどうか、そしてそれが子供であるかどうか疑問に思います。 –