1

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

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

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

  1. 在配置时禁用休眠配置连接到数据库。
  2. 根据错误提供自定义用户反馈并让 Elmah 工作(以某种方式)。这将是我理想的选择。

我能够移动 NHibernate 配置以在 Session_Start 上运行,如此处所述,这使得异常处理针对此错误起作用,但随后我得到其他异常,这些异常可能会误导问题的根本原因。有人对这种情况有很好的解决方案吗?

谢谢你。

4

1 回答 1

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 方法中,您可以访问请求并且可以执行您想要显示错误的操作(或显示一个漂亮的页面)

于 2012-09-13T14:54:14.003 回答