NHibernate:会话单身是一个坏习惯吗?

时间:2014-06-07 09:02:36

标签: c# nhibernate

在我的应用程序中,我将会话作为SessionManager类中的单例对象。每当我需要在应用程序的某个部分使用它时,我会这样做:

 using (var session = SessionManager.OpenSession())
 {

 }

这可能是一种不好的做法吗?如果是这样,关于我如何改进的任何想法?

编辑:以下是会话管理器的实现

 public static class SessionManager
    {
        private static readonly ISessionFactory sessionFactory;


        static SessionManager()
        {
            sessionFactory = Fluently.Configure().....
        }


        public static ISessionFactory SessionFactory
        {
            get { return sessionFactory; }
        }


        public static ISession OpenSession()
        {
            return sessionFactory.OpenSession();
        }
    }

2 个答案:

答案 0 :(得分:2)

请注意,ISession 是线程安全的!因此,您应该只有一个ISessionFactory,但每个线程只有一个ISession。

答案 1 :(得分:1)

不,它应该是单例,以便可以在应用程序的不同线程之间共享它。由于这些对象包含连接信息,hibernate配置信息和映射文件,位置路径,因此这些对象的权重很大。因此,创建实例数将使我们的应用程序变得更加重要。但是会话对象不是线程安全的。

只有需要具有不同配置的多个工厂的应用程序才有明显的理由创建和关闭多个SessionManager实例。

单线程可以提高应用程序的性能。