1

我從Application_Start事件初始化FluentNHibernate像這樣處理:FluentNhibernate配置異常中的Application_Start

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. 禁用nhibernate配置從連接到配置數據庫。
  2. 根據錯誤提供自定義用戶反饋,並讓Elmah工作(以某種方式)。這將是我理想的選擇。

我能夠移動NHibernate的配置上在session_start運行,爲described here,它得到的異常處理此錯誤的工作,但後來我得到其他異常,可以是誤導問題的根本原因。有沒有人有這種情況下很好的解決方案?

謝謝。

回答

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方法,你可以訪問請求,可以做自己想做的顯示錯誤(或顯示一個漂亮的頁面)

+0

我得到'什麼拋出'Application_BeginRequest'後異常拋出了異常' – Alex

+0

好吧,重點是在BeginRequest中你將有權訪問請求,這樣你就可以顯示錯誤(我拋出它並有我自己的錯誤處理代碼在開發中顯示可怕的錯誤消息,或者在生產中出現錯誤的屏幕) –

相關問題