2010-12-10 128 views
1

hi 我正在設計我的第一個asp.net web應用程序,使用nHibernate作爲數據提供程序。使用nhibernate的web應用程序體系結構

我讀過很多關於nhibernate在web應用程序中使用session-per-request模式。 我的應用程序將有幾個頁面是「監視器」,意思是它們每隔幾秒自動更新一次以反映數據的最近更改。在這種情況下,我的想法是,爲每個請求打開一個會話沒有什麼意義,因爲我知道幾秒鐘後就會有相同的請求。

我的想法是會話每會話對我來說會更有意義,但我在找到實現示例時遇到了問題。 我很感激任何好的資源,如何實現會話每會話,以及任何其他想法/建議,你可能有。

感謝

的Jhonny

回答

1

會話,每個請求仍然是一個好主意,因爲你不知道,在網絡之情況,當通話結束。打開/關閉會話沒有太多開銷,並且連接只在會話處於事務中時保持打開狀態。 ,並且,由於會話包裝了數據庫連接,因此只需通過保持會話打開即可從連接池中使用連接。

如果你被困在會話每會話的東西,看看NHibernate.Burrow - 這處理所有的對話/會話管理的東西給你。

+0

建議是好的,但你有一個錯誤點:會話不**保持連接打開,除非在事務中。 – 2010-12-10 14:35:11

+0

我首先關注的是開放的數據庫連接,但正如迭戈指出的那樣,他們只在交易開放時纔開放。 開放會話的動機之一就是利用其緩存機制,因爲有些對象不可能經常更改(例如,如果我監視我店內的庫存,店鋪部門和部門不太可能改變,而庫存水平顯然是)。 但是再次,也許我可以利用nhibernate的二級緩存..任何想法? – 2010-12-11 15:36:47

+0

好吧,我從11月11日開始就學習了nHibernate和2nd級緩存...... :)的確如此,我使用session-per-request,建議使用,第二級緩存保存(相對)靜態數據(部門和部門)。它的工作原理非常好。謝謝! – 2011-03-16 16:40:06

0

如果您要使用會話每會話,在我看來,對於監控頁面而言,整個用戶會話期間會話正在進行。我不會推薦這種方法,因爲在這種情況下有太多的問題機會。我建議打開一個IStatelessSession來更新監視器數據顯示,因爲這樣可以讓您獲得短暫會話的好處,而無需跟蹤對象狀態的開銷。