c# - 一对一和泛型 : "Association references unmapped class"

标签 c# nhibernate nhibernate-mapping

TL;DR 版本: 下面的代码在构建 SessionFactory 时给我一个“关联引用未映射的类”异常。应该在代码中更改什么以修复它?


即使 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 View 中显示它们。好的部分是,当我在 Controller 和 View 中使用它时,我的 Subject 将具有正确的类型。


但是,当尝试将 Review 项目的集合映射到我的 Person 类时,事情开始崩溃。这是我目前正在使用的映射:

<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 时以异常结束:

Association references unmapped class: ....insert one-to-many.class here....

那么问题来了:这里的问题是什么?这可能吗?我应该放弃映射通用实体吗?

最佳答案

代码映射为我生成了这个:

<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>

因此,请尝试使用完全限定的名称。

关于c# - 一对一和泛型 : "Association references unmapped class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547084/

相关文章:

c# - 弹出窗口拦截器验证

c# - 使用测试数据库集成测试链式 WCF 服务

c# - NHibernate 一对一映射

c# - 为什么 resharper 建议只读字段

c# - Unity3D - 检测移动平台上的碰撞

c# - 将字节数组从 Unity C# 传递到 C++ 插件

c# - NHibernate SchemaExport 不创建 ntext 列

c# - 在 LINQ 中获取子实体满足某些条件的项目

ASP.NET 应用程序针对 NHibernate 抛出 "unable to find assembly"错误

c# - NHibernate 中表之间的复杂关系