2012-05-23 73 views
0

我正在寫一個使用NHibernate連接到數據庫的桌面應用程序。我可以在NHibernate中打開多少個會話?

我的模型有一個會話,當模型初始化時打開,當模型被處理時關閉。當每個表單有一個模型時,這是可以的,因爲打開的會話數量與打開的窗口數量相同 - 只是一小部分。

我現在正在製作一個列出很多模型的表單,所以如果表單列出了50個模型,將會有50個打開的會話。我懷疑這可能是一個問題。

我可以在NHibernate中打開多少個會話?我應該只有一小部分,還是可以根據需要進行儘可能多的公開會話?

回答

2

這取決於您保持會話持續多久,以及您如何處理它們。會話本身非常輕便,並不一定會打開與數據庫的連接。

但是我認爲對於1表單有50個公開會話並不是最好的設計。我建議使用會話作爲「工作單元」,因爲當你想要做某些事情時(比如提供一些數據,更新一些數據,或者列出一堆實體),你可以打開會話,完成你的工作,然後處理會話。這可能會導致一些延遲加載和數據綁定的問題,但您可以通過獲取所需的關聯來解決這些問題。

您可以使用session.Lock(實體,LockMode.None)將您在一個會話中加載的實體重新連接到另一個會話中,因此不需要在用戶交互之間打開該會話。

+0

謝謝。我最初有一個工作單元設計,但在閱讀本文後我開始更改它:http://msdn.microsoft.com/en-us/magazine/ee819139.aspx但是,我不相信這篇文章是這麼好,所以我可能會改回來。 – Oliver

+0

我認爲那篇文章不好,但這取決於你的需求。如果你的應用程序將打開50個表單,那麼你需要一個不同的方法。這也取決於表格的開放時間和使用方式。 –

相關問題