我正在使用Fluent NHibernate开发Intranet MVC Web应用程序。
众所周知,创建必要的ISessionFactory
很繁重,因此只能执行一次。因此,我在Application_Start
期间在 Global.asax 文件中创建它,然后将其缓存在应用程序中以备将来使用。
问题是我只想向已经对数据库具有权限的用户授予访问权限。
理论上,这可以通过在连接字符串中定义Integrated Security=SSPI
来解决(而不是通过提供 SQL 用户名和密码)。
但是,这会在 Fluently.Configure
期间引发错误,因为配置发生在 Application_Start
期间,该 由托管应用程序的进程运行,该进程无权连接到数据库。
如何解决此问题?
你可以用BeginRequest
而不是Application_Start
初始化它:
private static bool _initialized = false;
private static object _syncRoot = new object();
protected void Application_BeginRequest(object source, EventArgs e)
{
if (_initialized)
{
return;
}
lock (_initialized)
{
if (_initialized)
{
return;
}
// Initialize the session factory here and cache it
_initialized = true;
}
}