2011-05-10 50 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> 
相關問題