2011-03-28 85 views
1
NHibernateSessionManager.Instance.GetSessionFrom(SessionFactoryConfigPath).Flush(); 

後不沖水的會議上,我得到發生異常

null id in FoodOrder.Core.Entities.Articles entry (don't flush the Session after an exception occurs) 

我可以只使用嘗試捕捉和session.Close或什麼是更好的在這個例子呢?

例如

public void CommitChanges() 
     { 
      if (NHibernateSessionManager.Instance.HasOpenTransactionOn(SessionFactoryConfigPath)) 
      { 
       NHibernateSessionManager.Instance.CommitTransactionOn(SessionFactoryConfigPath); 
      } 
      else 
      { 
       try 
       { 
        // If there's no transaction, just flush the changes 
        NHibernateSessionManager.Instance.GetSessionFrom(SessionFactoryConfigPath).Flush(); 
       } 
       finally 
       { 
        NHibernateSessionManager.Instance.GetSessionFrom(SessionFactoryConfigPath).Close(); 
       } 
      } 
     } 

回答

7

異常後,您的會話處於無效狀態,應該只配置。這就是爲什麼您應該始終在事務中執行寫入的一個原因。如果沒有,你不知道你的數據庫的狀態。所以我會建議:

  1. 您不明確地刷新並始終堅持數據訪問(讀取和寫入)在事務內完成。
  2. 如果這不是一個選項,我會鼓勵你找到異常的根本原因 - 聽起來像你有一個實體映射與從未設置的指定的ID - 並解決這個問題。
  3. 如果這不是一個選項,那麼在發生異常時處置該會話。

希望有所幫助。

+0

什麼是不沖洗會議的影響?如果前一個會話沒有被刷新,下一個「保存」調用會發生什麼? – ganders 2014-09-22 15:31:33