2011-08-12 24 views

回答

4

不,這是正確的。你想確保你有一個單獨的會話爲每個線程。

+1

那麼靜態的ISessionFactory.OpenSession()會一直返回一個新的ISession呢? – Eatdoku

+2

這是我的理解,是的。 – csano

1

SessionFactory是線程安全的,但不是Session。因此,如果您在一個線程中使用ISessionFactory.OpenSession()打開一個會話並在其中(在該線程內)使用它,而不與其他線程共享,則您可以安全地繼續。

但是不要在多個文件夾中使用ISessionFactory.GetCurrentSession()。

1

這不會引起任何問題,但要確保:

  • 你不「泄漏」 ISession實例(沒有其他線程將永遠有機會獲得它)

  • 你正確配置會話時,你不再需要它

ISessionFactory,另一方面是線程安全的,可以從多個線程對您的p爲使用,無需額外的同步藝術。

using(ISession session = _sessionFactory.OpenSession()) { 
    // use session making sure it will not become visible to other threads 
} 
相關問題