- 我使用NHibernate的爲Web應用程序
- 在我的Web應用程序數據庫實體由「Orgnanization」爲他們創造至極分離,並通過至極使用它們。 (一個組織的用戶不能訪問另一個組織的實體)。
- 數據庫實體有一個簡單的PK
- 我的NHibernate SessionFactory是在應用程序級別的單例。
- 我的NHibernate會話在Web請求的開始處打開,並在其結尾處關閉。
- 商務服務是無國籍的。
由於所有上述我們的結果與數據庫實體的工作如下:
變種實體= repository.Load(ENTITYID,currentUserId);
問題:
- 是否有緩存數據庫實體的請求的有用方法是什麼?
- 使用存儲在HttpContext中的線程安全哈希表,在存儲庫 級別編寫我自己的緩存機制是一個好主意嗎?
我並不十分清楚爲什麼要構建緩存。請注意,NHibernate已經爲你做了一些緩存,即使沒有啓用二級緩存。請參閱http://nhforge.org/doc/nh/en/index.html#performance-sessioncache。 「每當您將對象傳遞給Save(),Update()或SaveOrUpdate()時,只要您使用Load(),Get(),List()或Enumerable()檢索對象,該對象就會添加到內部緩存中的ISession。「 –
我知道一級緩存,它不適用於我的情況。我所有的實體不僅由PK加載,而且PK + OrganizationId需要加入至少1個附加表。 (選擇*從實體左加入用戶user.userid = entity.userid其中user.organizationid =:OrganizationId)。而且,當我們在一次會話中多次加載一個實體時,業務邏輯的複雜性使我們轉向了一些功能風格。根據查詢分析,我們有20個重複查詢到數據庫,有時候我們只有一個。 – Anubis