TL; DR版本:在构建SessionFactory时,下面的代码为我提供了“ Association引用未映射的类”异常。应该在代码中修改什么来修复它?
即使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项时,事情开始崩溃。这是我目前正在使用的映射:
<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>
使用此(缩写)类:
public class Person : BaseEntity, IReviewable
{
/* Abbreviated */
public virtual IList<Review<Person>> Reviews { get; set; }
}
这在构建SessionFactory时以异常结束:
关联引用未映射的类:....在这里插入one-to-many.class ....
所以问题:这里有什么问题?这甚至可能吗?我是否应该放弃映射通用实体?
答案 0 :(得分: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>
因此,请尝试使用完全限定名称。