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

NHibernate-映射实现树结构的通用实体,nhibernate,generics,tree,mapping,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; s

我对使用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>
这个错误是什么意思?我如何修复它?

更新:试试这个

<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
  • 必须指定实体表的名称
  • 使用完全限定的名称

不幸的是没有帮助谢谢你,迭戈,你帮了我很多。我几乎准备放弃使用泛型。
<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>