2017-03-29 31 views
1

是否有必要在交易中包裝nHibernate期貨?是否有必要在交易中包裝nHibernate期貨?

如:

using (var s = sf.OpenSession()) 
using (var tx = s.BeginTransaction()) 
{ 
    var blogs = s.CreateCriteria<Blog>() 
     .SetMaxResults(30) 
     .List<Blog>(); 
    var countOfBlogs = s.CreateCriteria<Blog>() 
     .SetProjection(Projections.Count(Projections.Id())) 
     .UniqueResult<int>(); 

    Console.WriteLine("Number of blogs: {0}", countOfBlogs); 
    foreach (var blog in blogs) 
    { 
     Console.WriteLine(blog.Title); 
    } 

    tx.Commit(); 
} 

從這裏:

https://ayende.com/blog/3979/nhibernate-futures

我看不到一個理由這樣做。這是一個選擇而不是插入或更新等。

回答

3

當一個NHibernate查詢沒有明確包裝在一個事務中時,它被稱爲「隱式事務」,這是不鼓勵的,並且具有各種含義,包括取消二級緩存。這一切都在這裏解釋:

https://hibernatingrhinos.com/Products/nhprof/learn#DoNotUseImplicitTransactions

的摘錄:

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

相關問題