2012-03-14 61 views
3

我們在一個項目中使用NHibernate,該項目從數據庫中獲取數據並將報告寫入單獨的系統。在我的情況下,病人通常會(但並非總是)在報告寫入時安排下一次約會。下面的查詢獲取下一個約會數據,以包含在報告中。NHibernate UniqueResult替代?

private NextFollowup GetNextFollowup(int EncounterID) 
    { 
     try 
     { 
      NextFollowup myNextF = new NextFollowup(); 

      IQuery myNextQ = this.Session.GetNamedQuery("GetNextFollowup").SetInt32("EncounterID", EncounterID); 

      myNextF = myNextQ.UniqueResult<NextFollowup>(); 

      return myNextF; 

     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

    } 

這裏的問題:

通常這個工作得很好,因爲有當預約定一個結果。但是,在沒有下一次隨訪的情況下,我會得到沒有唯一結果的錯誤。在這種情況下,我不想拋出異常,我想返回空對象。如果我要得到一個列表而不是UniqueResult,那麼在沒有下一次跟進的情況下,我會得到一個空列表。有沒有比在HQL查詢中使用列表更好的方式來處理「有價值,只會有一個」的情況?

回答

2

這可能工作:

private NextFollowup GetNextFollowup(int encounterID) 
{ 
    IQuery query = this.Session.GetNamedQuery("GetNextFollowup").SetInt32("EncounterID", encounterID); 

    // nextFollowup will be either the next instance, or null if none exist in the db. 
    var nextFollowup = query.Enumerable<NextFollowup>().SingleOrDefault(); 

    return nextFollowup; 
} 

注:更新的命名遵循Microsoft最佳實踐

的嘗試捕捉這裏不供應任何目的除了鬆散的堆棧跟蹤,如果有異常,所以我已將其移除。

如果你想返回一個新的NextFollowup如果不存在,您可以更新查詢行:

var nextFollowup = query.Enumerable<NextFollowup>().SingleOrDefault() ?? new NextFollowup();