NHibernate通过外键将子类属性映射到另一个对象

时间:2011-05-10 13:42:13

标签: nhibernate mapping subclass

我正在研究一个不完美的现有数据结构,我有一个继承映射问题需要解决。

我在每个层次结构中使用一个表,并且具有设置了鉴别器的子类。但是,子类属性是返回其他表的外键。如何设置我的子类映射,以便在查询fk属性时得到一个对象而不是null?这甚至可能吗?

我当前的地图

<?xml version="1.0" encoding="utf-8" ?>
      <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MVC3" namespace="MVC3.Models">
  <class name="Image" table="Images">
<id name="Id" column="ImageId">
  <generator class="identity" />
</id>
<discriminator column="ImageType" />
<property name="Url" column="Url" not-null="true" />
<property name="Caption" column="Caption" />
<subclass name="AupairImage" discriminator-value="AupairImage">
  <join table="Aupairs" inverse="true">
    <key column="AupairId" />
    <many-to-one name="Aupair" column="AupairId" class="Aupair" />
  </join>
</subclass>
<subclass name="FamilyImage" discriminator-value="FamilyImage">
  <join table="Families" inverse="true">
    <key column="FamilyId" />
    <many-to-one name="Family" column="FamilyId" class="Family" />
  </join>      
</subclass>

我想添加一个实体图,但我还不能发布图片:0(

但外键AupairId和FamilyId链接回另外两个表并且类型为int 32

我知道重组Aupair和Family实体以获得层次结构以摆脱图像中的那个实体会更好,但由于现有代码,这将是最后的手段。

提前感谢您对绘图专家的任何帮助....

1 个答案:

答案 0 :(得分:0)

在第二次看之后意识到我做错了什么,应该在Subclass下使用带有定义列的多对一

    <subclass name="MVC3.Models.FamilyImage, MVC3" discriminator-value="FamilyImage">
     <many-to-one cascade="all" class="MVC3.Models.Family, MVC3" name="Family">
        <column name="FamilyId" />
      </many-to-one>
    </subclass>