2014-04-12 16 views
0

我最近開始着手使用NHibernate作爲ORM工具的一個項目。我在nHibernate中瞭解了上下文會話並理解了它背後的想法。我有一個疑問,在一個區域,在網絡會話中進行的NHibernate Db調用

比方說,我有一個員工域和一個HTTP調用,我打電話給我的員工獲得ID = 1,3次庫。

Employee employee = _employeeRepository.GetEmployee(1);

案例1:這將是一個1 DB調用 案例2:將在3個調用數據庫。

請指導我。

RGDS 桑迪

回答

1

這取決於你的設置。

一級緩存將達到DB一次針對您使用查詢每個Session對象。如果有與此存儲庫共享的單個Session ..將只進行一個數據庫調用。但是,如果每次對存儲庫的調用都會導致創建多個Session,您將收到多個調用。這是默認設置。

如果啓用了第二級高速緩存,然後經由SessionFactory創建的每個Session將共享上述性質。也就是說,如果您有多個存儲庫,並且存在多個Session,它們來自同一個SessionFactory實例..那麼從兩個存儲庫加載同一個員工將導致一次數據庫調用。

There is some good information in this post - 這是與Hibernate相關的,但基本原則仍然適用於NHibernate的。

我建議您在網絡環境中啓用二級緩存(我們使用SysCache2)..這樣您就可以保證Session總是在單個請求中共享緩存對象(假設當然,您的Session終身管理是每個請求..這應該是..)。

+0

謝謝Simon的解釋 – user2377549