2009-03-01 2 views
0

Я пытаюсь создать объект стиля SiteMapNode с сопоставлениями NHibernate. Цель состоит в том, чтобы имитировать объект ASP.NET SiteMapNode, чтобы пользовательский поставщик мог быть построен с использованием NHibernate для динамического бэкэнд.Сопоставление братьев и сестер в NHibernate

Проблема, с которой я сталкиваюсь, - это путь дерева к карте сайта. Объект ASP.NET имеет следующий и предыдущий родственный объект. Это хорошо и хорошо. Я не хотел иметь NextSiblingId и PreviousSiblingId в моей таблице SiteMapNode. Я решил, что когда я покажу эти объекты, было бы неплохо иметь свойство OrdinalPosition. После исследования кажется, что я не могу создать сопоставление свойств NextSibling и PreviousSibling в NHibernate. Моя мысль исправить это состоит в том, чтобы сделать коллекцию Siblings. Эта коллекция будет иметь тот же 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 использовать этот столбец на объекте владельца для сопоставления столбцу постороннего объекта. Мне просто нужно выяснить, как заставить nHibernate смотреть на ParentNodeId на узлах коллекции. Может ли кто-нибудь помочь?

ответ

0

Заканчивать этот блоге: How to map a tree in NHibernate

+0

Я нашел этот пост раньше. Первоначально я прочитал его, когда искал вопрос «Следующий/предыдущий брат». Он по-прежнему не адресует узлы на том же уровне, что и текущий объект. Мне интересно, если это то, где я должен получить родителя, а потом это дети. –

Смежные вопросы