2011-11-01 150 views
0

我正在使用舊數據庫,無法更改。
我有一個表(Table1)與另一個表(表2)有一個複合關鍵的多對一的關係。
如果一切是兩岸向前的表1的映射可能是這樣的:nHibernate:與複合鍵的多對一映射中的默認值

<class name="Table1" table="Table1"> 
    <id name="Id" column="I_ID"></id> 
    <many-to-one name="Table2" class="Table2"> 
    <column name="I_TABLE2_ID1"></column> 
    <column name="I_TABLE2_ID2"></column> 
    </many-to-one> 
</class> 

我的問題是,我沒有在表1沒有I_TABLE2_ID2列。
所以我想用一個默認值來代替。有什麼辦法可以在映射文件中完成這個任務嗎?

EDIT1:
以下映射似乎工作:

<class name="Table1" table="Table1"> 
    <id name="Id" column="I_ID"></id> 
    <property name="Table2Id1" column="I_TABLE2_ID1"></property> 
    <bag name="Table2" where="I_ID2 = 12"> 
    <key column="I_ID1" property-ref="Table2Id1"></key> 
    <one-to-many class="Table2"/> 
    </bag> 
</class> 

此外,我不得不改變表2屬性爲IList的類型,但我想我能使用的私有財產,使實體外觀更好...

回答

0

也許你應該指定這種關係爲one-to-many,而不是指定集合上的where子句。

http://www.nhforge.org/doc/nh/en/index.html#collections-mapping

+0

感謝您的回覆!這是你的嗎?我猜它也有可能跳過映射中的關係,並將其添加到linq查詢中呢? – Vegard

+0

是的,這就是我的意思。如果需要,可以繞過包中的where子句並在代碼中手動過濾集合。 –