2012-09-22 42 views
2

TL; DR版本:代碼構建SessionFactory的下方時,給了我一個「協會引用未映射類」異常。代碼中應該修改什麼來修復它?1對5月和泛型:「協會引用未映射類」


即使Ayende @ Rahien不建議使用映射到泛型類的this 2007 article我仍然有它一展身手。我用他提到的方法。首先一點是工作:

<class name="Review`1[Person]" table="Review"> 
    <id name="Id" column="ReviewId"><generator class="native" /></id> 
    <property name="Rating" /> 
    <many-to-one name="Subject" column="PersonId" class="Person" /> 
</class> 

相應的泛型類看起來是這樣的:

public class Review<T> : BaseEntity where T : IReviewable 
{ 
    public virtual int Rating { get; set; } 
    public virtual T Subject { get; set; } 
} 

這是工作,我可以加載這些Review實體,並顯示在我的MVC的觀點沒有問題。好的部分是當我在控制器和視圖中使用它時,我的Subject將具有正確的類型。


但是,當試圖在我的Person類中映射Review項的集合時,事情開始出現故障。下面是我目前使用的映射:

協會引用映射的:這在構建SessionFactory的與異常結束

public class Person : BaseEntity, IReviewable 
{ 
    /* Abbreviated */ 
    public virtual IList<Review<Person>> Reviews { get; set; } 
} 

<class name="Person"> 
    <!-- abbreviated --> 
    <bag name="Reviews" table="Review"> 
    <key column="PersonId"/> 
    <one-to-many class="Review`1[Person]" /> 
    <!-- Also tried these: 
    <one-to-many class="table="Review"> 
    ... plus a few variations with fully qualified names ... 
    --> 
    </bag> 
</class> 

有了這個(略)類類:....在這裏插入一對多的類別....

所以這個問題:這裏有什麼問題?這甚至有可能嗎?我應該放棄映射通用實體嗎?

回答

1

映射,通過代碼生成的這對我來說:

<class name="NHTest.Review`1[[NHTest.Person, NHTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" table="Review"> 
    ... 
    <many-to-one name="Subject" column="..." /> 
</class> 
<class name="Person"> 
    ... 
    <bag name="Reviews"> 
    <key column="..." /> 
    <one-to-many class="NHTest.Review`1[[NHTest.Person, NHTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" /> 
    </bag> 
</class> 

所以,儘量用完全限定名稱。

+0

通用類型上的Version/Culture/PublicKeyToken位實際上是關鍵。感謝一羣花時間來提出這個答案! – Jeroen