application_start中的FluentNhibernate配置异常处理

时间:2012-09-13 14:20:20

标签: asp.net-mvc asp.net-mvc-3 nhibernate exception-handling fluent-nhibernate

我正在从Application_Start事件中初始化FluentNHibernate,如下所示:

Fluently.Configure()
.Database(OracleDataClientConfiguration.Oracle10
            .Driver<NHibernate.Driver.OracleDataClientDriver>()
            .ConnectionString("MyConnectionString")
            .DefaultSchema("MySchema")
        )
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<SomeClass>())
.BuildConfiguration()
.BuildSessionFactory();

如果连接字符串错误,或者由于某些其他原因导致与DB的连接失败,我会收到TNS No listener异常。我想显示/记录此异常,但Application_Start(和Applicaiton_Error)在IIS7集成模式下没有HttpContext或Response对象。用户获得一个黄色的死亡屏幕告诉他们打开自定义错误。 Elmah也没有记录消息。我想以两种可能的方式解决问题:

  1. 禁止nhibernate配置在配置时连接到数据库。
  2. 根据错误提供自定义用户反馈并让Elmah工作(不知何故)。这将是我理想的选择。
  3. 我能够将NHibernate配置移动到Session_Start上运行,如described here,它为此错误获取异常处理,但后来我得到了其他可能误导问题根本原因的异常。有没有人有这个场景的好解决方案?

    谢谢。

1 个答案:

答案 0 :(得分:2)

这就是我的所作所为:

void Application_Start() {
    try {
          // setup your app / nhibernate
    } catch(Exception ex) {
        Application["StartupError"] = ex
    }
}

void Application_BeginRequest() {
    var startupError = Application["StartupError"] as Exception;
    if (startupError != null)
        throw new Exception("Error starting application", startupError);
}

在您的BeginRequest方法中,您可以访问请求并可以执行您想要显示的错误(或显示一个不错的页面)