NHibernate - 映射实现树结构的通用实体

时间:2012-02-16 11:32:57

标签: nhibernate generics tree mapping

我使用Nhibernate相对较新,但基本的东西已经有效了。

现在我必须映射实现树结构通用实体。另外,每一个(只有通用或唯一的树)工作正常。

以下是模型的代码:

public class Test<T>
{
    public virtual Int64 Id { get; set; }
    public string Name { get; set; }
    public IList<Test<T>> Children { get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PersistencyObjectModel" namespace="PersistencyObjectModel.Domain">
  <class name="Test`1[String]">
    <id name="Id">
      <generator class="guid"/>
    </id>
    <property name="Name" length="50" not-null="true" unique="true"/>

    <set name="Children" table="TEST_TEST_LINK" cascade="all-delete-orphan" >
      <key column="ParentId"/>
      <many-to-many column="ChildId" class="Test`1[String]"/>
    </set>

  </class>
</hibernate-mapping>

当我使用该模型时,我收到以下Nhibernate错误:

{"persistent class PersistencyObjectModel.Domain.Test`1[[PersistencyObjectModel.Domain.String, 
    PersistencyObjectModel]], PersistencyObjectModel not found"}

这个错误意味着什么,我该如何解决?

1 个答案:

答案 0 :(得分:0)

更新:试试这个

<hibernate-mapping namespace="PersistencyObjectModel.Domain" 
                   assembly="PersistencyObjectModel"
                   xmlns="urn:nhibernate-mapping-2.2">
  <class name="PersistencyObjectModel.Domain.Test`1[[System.String,
               mscorlib, Version=4.0.0.0, 
               Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
         table="TestOfString">
    <id name="Id">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" length="50" not-null="true" unique="true"/>
    <set name="Children" table="TEST_TEST_LINK">
      <key column="ParentId" />
      <many-to-many column="ChildId"
                    class="PersistencyObjectModel.Domain.Test`1[[System.String, 
                           mscorlib, Version=4.0.0.0,
                           Culture=neutral, PublicKeyToken=b77a5c561934e089]]"/>
    </set>
  </class>
</hibernate-mapping>

有些注意事项:

  • 您不能将guid生成器与long属性一起使用;将其更改为Guid
  • 您必须指定实体表的名称
  • 使用完全限定名称。