0

我一直在尝试使用 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 使用所有者对象上的该列来映射到外部对象的列。我只需要找出如何让 nHibernate 查看集合节点上的 ParentNodeId。任何人都可以帮忙吗?

4

1 回答 1

0

查看这篇博文:如何在 NHibernate 中映射树

于 2009-03-01T03:49:10.103 回答