2012-02-16 153 views
0

我对使用Nhibernate比较陌生,但基本的东西已经在工作。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"} 

这个错误是什么意思,我该如何解决?

回答

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> 

需要注意以下几点:

  • 您不能使用​​发生器用long属性格式;将其更改为Guid
  • 您必须指定实体表的名称
  • 使用完全限定名称。
+0

不幸的是,没有帮助 – Oleg 2012-02-19 13:43:35

+0

@Oleg那么你应该使用基于代码的映射解决方案 – 2012-02-19 14:33:09

+0

谢谢你迭戈,你帮了我很多。我几乎准备放弃通用的使用。 – Oleg 2012-02-20 09:45:59