在使用NHibernate和ASP.NET时,您应该使用相同的连接字符串吗?

时间:2010-02-15 16:33:50

标签: c# asp.net nhibernate

我刚刚重新实现了一个ASP.NET Web应用程序,它使用NHibernate为每个请求使用一个会话(使用IHttpModule)。 SessionFactory是在应用程序启动时使用web.config文件中的连接字符串创建的。然后存储SessionFactory并使用线程安全的懒惰单例创建和释放会话。

这意味着,如果说20个用户正在使用该应用程序,则在创建与数据库的任何连接时会使用相同的用户(在web.config中的连接字符串中指定) - 这是最佳做法吗? SQL Server Express最终会抱怨连接数量吗? (因为根据请求创建和释放连接,这在实践中可能不是一个问题。)

在我的旧架构中,使用当前用户的用户名创建了连接 - 这是否有任何优势(可能如果每个不同用户的登录都有安全限制)。

当使用包含SessionFactory并管理会话的线程安全,懒惰的单例(如下所示)时,我相信这可以在网站范围内广泛使用,例如从不同PC访问应用程序的2个用户将使用相同的实例?

public static NHibernateSessionManager Instance
{
  get
  {
    return Nested.NHibernateSessionManager;
  }
}


private class Nested
{
  static Nested() { }
  internal static readonly NHibernateSessionManager NHibernateSessionManager =
    new NHibernateSessionManager();
}

2 个答案:

答案 0 :(得分:1)

只要您的连接字符串相等(例如,您没有为当前用户插入用户ID)您将通过使用相同的字符串从应用程序的两端获得更好的性能。

答案 1 :(得分:1)

如果目标是提高性能,那绝对是最佳做法。使用一个连接字符串可启用connection pooling