2010-04-04 58 views
2

我的Web應用程序中的母版頁執行身份驗證並使用Get加載用戶實體。負載與獲取在Nhibernate

在此之後,無論usercontrols或任何其他類需要用戶對象,我都會執行Load

正常情況下nhibernate is supposed to load the object from cache or return the persistent loaded object每當Load被調用。但這不是我的web應用程序顯示的行爲。 NHprof每次調用Load時都會顯示sql。如何驗證Load的正確行爲?我使用S#arp架構框架。

回答

2

如果使用Get,那麼命中數據庫。 如果使用加載,則不會創建數據庫命中,但對象(您的案例中的用戶)是使用「延遲加載」創建的。所以當你檢查一個屬性時,它知道你需要數據,所以它通過查詢來獲取數據。

如果您想從緩存中獲取對象,則需要考慮2個選項。 一級緩存,是在ONE會話中使用的緩存。所以,當你關閉一個會話或在不同的會話中加載同一個對象時,你會得到額外的點擊。 二級緩存適用於所有會話。如果一個會話獲取該對象,則其他會話從緩存中獲取該會話。

所以你想要的可能是二級緩存。

6

實際上,對未標記爲懶惰的實體調用Load會導致立即加載。這是因爲非懶惰實體從未被代理。在這種情況下,它的行爲與Get相同。