我想知道以下行为。
基本上我有一个静态的ISessionFactory,一个运行10个线程的应用程序,每个线程都会使用ISessionFactory.OpenSession()来获取一个ISession。这会导致任何问题吗?
答案 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
}