2012-02-16 66 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