我一直在尝试使用NHibernate映射构建一个SiteMapNode样式对象。目标是模仿ASP.NET SiteMapNode对象,以便可以使用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>
Siblings包返回与ChildNodes集合相同的内容。我只是不了解整个键和外键属性是如何工作的。我认为key元素上的column属性告诉nHibernate在owner对象上使用该列来映射到外部对象的列。我只需要找出如何让nHibernate查看集合节点上的ParentNodeId。有人可以帮忙吗?