1

我有一个困难的情况。

我们知道 NHSessionFactory在我们的应用程序中是一个单例。

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

并且SessionFactory是从Configuration().BuildSessionFactory()Configuration()流畅配置​​的数据库创建的。

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

这里的问题是 如何将不同的用户传递给Configuration并使用它SessionFactory,以防我们Configuration首先需要创建?再次创建SessionFactory是错误的方法,对吗?

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

4

1 回答 1

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 对您的应用程序内存使用来说会非常昂贵,会使您的应用程序架构复杂化,并且确实没有必要,因为还有其他选项,例如我上面列出的选项。

于 2012-11-13T05:14:20.667 回答