2014-07-09 25 views
0

我對NHibernate相當陌生,所以請耐心等待。我有一個父對象鏈接到一個相當複雜的對象模型中的子對象。如果我寫SQL,我的查詢應該是這樣的:如何在NHibernate中暴露兒童的多層次屬性Parent HBM

Select A.P1, A.P2, A.BId, C.Id as BCId, D.Id As BCDId 
From A 
Left Join B On A.BId = B.Id 
Left Join C On B.CId = C.Id 
Left Join D On C.DId = D.Id 

生成的類將有屬性暴露,而不是對象本身B.Id和C.Id。我如何在HBM文件中對此進行建模?我試圖使用連接,但這不允許嵌套,所以雖然我可以獲得一個或兩個級別,但我無法同時獲得所有連接。

+0

我認爲你應該使用nhibernate linq提供程序或者通過提供程序進行查詢。然後,您可以形成上述查詢,甚至將它們轉換爲新創建的dto。 –

+0

問題是這是一個相當大的代碼庫,有各種各樣的方法來獲取A對象。我也必須改進所有這些。 HBM會更方便。 –

+0

方便,但如果有很多其他地方使用這個對象,你將不得不改變這些以引用新暴露的領域。如果更改可能導致性能問題的基本映射,您也將影響所有其他代碼區域。回答你的問題,雖然我不認爲你可以暴露超過1級的屬性。我發現將單個表映射到單個實體並在彼此之間創建必要的對象引用變得更容易,以便您可以使用它們之間的關係在這些實體上進行查詢。 –

回答

1

的共識是,這是不可能在NHibernate和你應該使用一個數據庫視圖,這映射到實體,使用LINQ的NHibernate或queryover提供商或以下的StackOverflow文章中使用的建議概要:

NHibernate: Mapping a join on a joined table