2015-02-24 32 views
0

我對NHibernate比較新。我正在開發一個Web應用程序,我需要從Hibernate會話中分離實體並將其傳遞給UI以進行更改。我正在使用NHibernateUtil.Initialize用於實體的急切加載。我面臨的問題是實體有很多的集合,有些集合甚至有子集合,所以當我使用NHibernateUtil.Initialize它急於加載所有的集合,這反過來增加我的JSON數據,我傳遞給UI層。我在服務層中使用ASP.NET Webapi。有沒有辦法將渴望的加載控制到我在實體中需要的特定集合。任何幫助,將不勝感激控制NHibernate實體Eagerloading

感謝

+0

我會說,該解決方案不在數據層。不是在NHibernate裏面,不是使用預先加載。解決方案應該在服務層上。 Imlement自定義解析器,將它們注入JSON串行器設置。這些應該能夠驅動你的實體應該加載並轉換成JSON的深度。或者 - 使用DTO。應該由一些映射器來填充(實際上與解析器的行爲類似)。但是不要把這個要求放在NHiberante上。它不是JSON轉換的工具 – 2015-02-24 17:14:29

+0

你嘗試了什麼?你可以發佈一些代碼嗎? – 2015-02-24 19:25:35

回答

0

在映射您可以指定收藏和參考延遲加載默認行爲。你如何創建你的映射?您可以通過在單個查詢中指定獲取策略來覆蓋默認值。你使用什麼模塊進行查詢(QueryOver,Linq等)?我的首選是始終將默認設置爲延遲加載,然後根據需要進行渴望獲取。

此外,我的首選是不直接將實體傳遞給UI層,而是在Controller中創建ViewModel。

+0

感謝您的回答,我在數據層使用HQL來保溼實體。截至目前,我已經創建了幾個DTO,我將推向UI。但是我覺得這個方法很少有問題,因爲我的DTO是獨立於實體的,我想我必須在更新/刪除後將它映射回實體。我不確定我的方法是否正確 – SRK 2015-02-24 22:52:24

+0

是的,您需要將其映射回來。使用DTO的最大缺點是最終會產生大量重複的代碼。 – cbp 2015-02-25 11:45:06