2011-05-06 70 views
1

我有以下方法。處理NHibernate加載失敗

public Foo GetById(int id) 
    { 
     ISession session = GetCurrentSession(); 
     try 
     { 
      return session.Load<Foo>(id); 
     } 
     catch(NHibernate.ObjectNotFoundException onfe) 
     { 
      throw(onfe); 
     } 
    } 

不幸的是,永遠不會拋出onfe。我想處理這種情況,我只得到 支持代理,因爲數據庫中沒有足夠的行。

+0

它在此時拋出任何異常嗎? – 2011-05-06 10:07:59

+0

不,現在沒有。當我使用session.Get()時,它不會被拋出:( – AGuyCalledGerald 2011-05-06 10:11:02

回答

3

我建議你寫你自己的ObjectNotFoundException並重寫方法:

public Foo GetById(int id) 
{ 
    Foo foo; 
    ISession session = GetCurrentSession(); 
    foo = session.Get<Foo>(id); 
    if (foo == null) 
    { 
     throw new ObjectNotFoundException(string.Format("Foo with id '{0}' not found.", id)); 
    } 
} 

有兩個問題與你的方法寫:

  1. 您應該使用Get加載一個實體通過它的關鍵。
  2. 您的異常處理包裝原始異常並無故重新拋出。
+0

你能更接近地解釋你的語句2嗎? – AGuyCalledGerald 2011-05-06 11:42:32

+1

你的catch塊沒有處理ObjectNotFoundException,它將它包裝在一個新的Exception中並拋出它。最大的問題是調用代碼將只能捕獲異常,並不知道對象是否加載失敗或其他問題。 – 2011-05-06 11:50:16