我有一个困难的情况。
我们知道NH SessionFactory
是我们应用中的单身人士。
“重量级,线程安全,你应该只有一个 数据库”。
SessionFactory
是从Configuration().BuildSessionFactory()
创建的,其中Configuration()
是我精心配置的数据库。
这是个问题。 我需要在MVC应用程序中为我的连接字符串使用不同的用户。这是不同用户连接到数据库所必需的。当连接正常时,我使用NH来操作域映射对象。
这里的问题是 如何将不同的用户传递到Configuration
,并在我们需要创建SessionFactory
时使用此Configuration
首先?再次创建SessionFactory
是错误的方法,对吧?
这个变得更难,因为我使用Windsor容器在我的MVC应用程序运行之前注册所有对象。
答案 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对你的应用程序内存使用来说是非常昂贵的,会使你的应用程序架构复杂化,而且实际上没有必要,因为还有其他选项,例如我上面列出的选项。