TL;DR 版本:下面的代码在构建 SessionFactory 时给了我一个“关联引用未映射的类”异常。应该在代码中更改什么来修复它?
尽管 Ayende @ Rahien 不建议在2007 年的这篇文章中使用泛型类的映射,但我仍然尝试了一下。我使用了他提到的方法。首先是工作的位:
<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 时以异常结束:
关联引用未映射的类: ....在此处插入一对多.class ....
所以问题是:这里有什么问题?这甚至可能吗?我应该放弃映射通用实体吗?