来自多个线程的ISessionFactory.OpenSession()

时间:2011-08-12 16:34:44

标签: nhibernate

我想知道以下行为。

基本上我有一个静态的ISessionFactory,一个运行10个线程的应用程序,每个线程都会使用ISessionFactory.OpenSession()来获取一个ISession。这会导致任何问题吗?

3 个答案:

答案 0 :(得分:4)

没有。这是对的。您希望确保每个线程都有一个单独的会话。

答案 1 :(得分:1)

SessionFactory是线程安全的,但不是Session。因此,如果您在一个线程中打开一个带有ISessionFactory.OpenSession()的会话并在那里(在该线程内)使用它而不与其他线程共享,那么您可以放心使用。

但是不要在多个therads之间使用ISessionFactory.GetCurrentSession()。

答案 2 :(得分:1)

这不会导致任何问题,但请确保:

  • 你没有'泄漏'ISession实例(没有其他线程可以访问它)

  • 您在不再需要时正确处理会话

另一方面,ISessionFactory是线程安全的,可以在多个线程中使用而无需您进行额外的同步。

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