2011-05-10 92 views
0

我正在研究一个不完美的现有数据结构,并且我要解决一个继承映射问题。NHibernate通过外键将子类属性映射到另一个对象

我正在使用每个层次结构的表,并设置了带有鉴别符的子类。但是,子类属性是外键返回到其他表。我如何设置我的子类映射,以便当我查询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会更好实体有一个层次结构来摆脱图像中的一个,但由于现有代码,这将是最后的手段。

预先感谢任何帮助,从您映射专家的好评....

回答

0

意识到我在做服用第二次看错后,刚才应该使用在许多一对一的子类与定义列

<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> 
相关问题