NHIbernate SessionFactory和Configuration Recreation

时间:2012-11-12 23:13:17

标签: asp.net-mvc-3 nhibernate castle-windsor sessionfactory

我有一个困难的情况。

我们知道NH SessionFactory是我们应用中的单身人士。

  

“重量级,线程安全,你应该只有一个   数据库”。

SessionFactory是从Configuration().BuildSessionFactory()创建的,其中Configuration()是我精心配置的数据库。

这是个问题。 我需要在MVC应用程序中为我的连接字符串使用不同的用户。这是不同用户连接到数据库所必需的。当连接正常时,我使用NH来操作域映射对象。

这里的问题是 如何将不同的用户传递到Configuration ,并在我们需要创建SessionFactory时使用此Configuration首先?再次创建SessionFactory是错误的方法,对吧?

这个变得更难,因为我使用Windsor容器在我的MVC应用程序运行之前注册所有对象

1 个答案:

答案 0 :(得分:4)

听起来您想要为应用程序的不同用户提供不同的连接字符串。

NHibernate有一个功能,你可以在其中提供自己的DriverConnectionProvider,它允许你通过覆盖GetConnection()方法最终能够动态创建自定义连接字符串。

示例:

class DynamicConnectionProvider : DriverConnectionProvider
{
    public override IDbConnection GetConnection()
    {
        IDbConnection connection = Driver.CreateConnection();

        try
        {
            connection.ConnectionString = // Add your logic for dynamically creating a connection string

            connection.Open();
        }
        catch ( Exception e )
        {
            connection.Dispose();

            throw;
        }

        return connection;
    }
}

您还可以查看以下链接以获取示例:

是的,创建重复的SessionFactories对你的应用程序内存使用来说是非常昂贵的,会使你的应用程序架构复杂化,而且实际上没有必要,因为还有其他选项,例如我上面列出的选项。