2010-07-21 60 views
14

我知道,對於多部分寫入,我應該使用nhibernate中的事務。然而,對於簡單的讀寫操作(1部分)...我已經讀過,總是使用事務是個好習慣。這是必需的嗎?我應該總是使用nhibernate中的事務(即使對於簡單的讀寫操作)?

我應該做一下簡單的閱讀?或者我可以放棄所有的橫切部分?

public PrinterJob RetrievePrinterJobById(Guid id) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      var printerJob2 = (PrinterJob) session.Get(typeof (PrinterJob), id); 
      transaction.Commit(); 

      return printerJob2; 
     } 
    } 
} 

public PrinterJob RetrievePrinterJobById(Guid id) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     return (PrinterJob) session.Get(typeof (PrinterJob), id);    
    } 
} 

什麼簡單的寫?

public void AddPrintJob(PrinterJob printerJob) 
{ 
    using (ISession session = sessionFactory.OpenSession()) 
    { 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      session.Save(printerJob); 
      transaction.Commit(); 
     } 
    } 
} 
+7

很好的答案在SO:http://stackoverflow.com/questions/1657465/nhibernate-transactions-on-reads – 2010-07-21 22:22:04

回答

21

最好的建議是總是使用一個事務。 This link from the NHProf文檔,最好解釋爲什麼。

當我們沒有定義自己的 交易,它回落到 隱性事務模式,其中每 語句到數據庫中的 自己的事務中運行,造成大量 性能成本(數據庫時間到 建立和拆除交易)和 降低一致性。

即使我們只是讀取數據,我們 應該使用事務,因爲 使用事務確保我們從數據庫中獲取 一致的結果。 NHibernate假定對 數據庫的所有訪問都是在 事務下完成的,並強烈建議 在沒有 事務的情況下使用會話。

(順便說一句,如果你在做嚴肅的NHibernate工作,考慮嘗試NHProf)。

相關問題