2017-03-29 8 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クエリがトランザクションに明示的にラップされていないときは、暗黙的なトランザクションと呼ばれ、第2レベルのキャッシュを無効にするなど、さまざまな意味があります。これは、すべてここで説明されています

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

抜粋:

我々はデータのみを読んでいる場合でも、トランザクションを使用して、我々はデータベースからの一貫した結果を得ることを保証するので、我々は、トランザクションを使用する必要があります。 NHibernateは、データベースへのすべてのアクセスがトランザクションの下で行われると仮定し、トランザクションなしでセッションの使用を強く嫌う。

関連する問題