流畅的NHibernate与ASP.NET MVC 2 - 会话管理,每个用户1个连接字符串

时间:2010-12-07 16:54:44

标签: asp.net-mvc nhibernate asp.net-mvc-2 session fluent-nhibernate

我需要配置我的Fluent NHibernate / ASP.NET MVC 2应用程序,以便为每个用户使用单个连接/连接字符串。这是因为:

  1. 有多个数据库,都具有相同的架构,用户可以选择登录。
  2. 此ASP.NET应用程序与之协同工作的遗留应用程序基于数据库供应商的平台,因此坚持使用数据库用户帐户。
  3. 试图说服DBA提供单一的do-everything用户帐户比仅仅弄清楚如何使其工作更加痛苦和耗时。
  4. 我觉得我必须解释我的理由,以避免一些“不要那样做”的答案。

    所以无论如何,我首先使用单个连接字符串以正常,正确的方式设置所有内容。我使用了LLBLGen创建的SessionManager来创建SessionFactory。在SessionFactory期间创建并存储Application_Start()。我还有一个IHttpModule,它将NHibernate会话绑定到当前会话上下文。 (我忘记了我从那里得到的网站。)

    我现在想要做的是让用户到达登录页面。他们将选择他们的数据库并输入用户名和密码。应用程序将创建一个数据库连接,将其存储在用户的会话中,NHibernate将获取该数据库连接并使用它。

    关于这样做的任何提示都会非常有用,但实际上我需要克服最初的障碍:如果我从SessionFactory配置中删除数据库连接信息,它会抱怨并抛出异常。如果我不从SessionFactory配置中删除数据库连接信息,即使使用OpenSession(IDbConnection)提供了不同的连接,它似乎也会使用该连接字符串。此外,既然我甚至不希望NHibernate在用户登录之前做任何事情,我觉得我的IHttpModule可能会导致其中一些问题。

    道歉,如果这听起来更像是一个不连贯的咆哮而不是一个问题;我刚刚把头撞到了墙上一段时间了。任何和所有关于最佳实践的建议(除了“使用一个连接字符串,白痴!”)都表示赞赏。

1 个答案:

答案 0 :(得分:1)

你见过http://www.codeproject.com/KB/aspnet/NHibernateMultipleDBs.aspx吗?它没有解释如何用Fluent,而是直接NHibernate来做到这一点,但我认为这将是一个很好的起点。