在asp.net-mvc页面上使用nhibernate事务和二级缓存的正确方法是什么?

在asp.net-mvc页面上使用nhibernate事务和二级缓存的正确方法是什么?,nhibernate,transactions,second-level-cache,Nhibernate,Transactions,Second Level Cache,我有许多页面运行10到15个不同的查询来构建一个页面。我从几篇文章中看到,要使nhibernate二级缓存工作,我需要使用事务 所以我想确认一下,我应该将所有10到15个查询放在一个事务中?像这样的 var session = Repository.Session; using (var tx = session.BeginTransaction()) { var viewModel = new ViewModel(); vi

我有许多页面运行10到15个不同的查询来构建一个页面。我从几篇文章中看到,要使nhibernate二级缓存工作,我需要使用事务

所以我想确认一下,我应该将所有10到15个查询放在一个事务中?像这样的

    var session = Repository.Session;
    using (var tx = session.BeginTransaction())
     {
           var viewModel = new ViewModel();
           viewModel.Cars  = session.Query<Car>();
           viewModel.Dogs = session.Query<Dog>();
           viewModel.Cats  = session.Query<Cat>();
           viewModel.Birds  = session.Query<Bird>();
            tx.Commit();
      }
var session=Repository.session;
使用(var tx=session.BeginTransaction())
{
var viewModel=新的viewModel();
viewModel.Cars=session.Query();
viewModel.Dogs=session.Query();
viewModel.Cats=session.Query();
viewModel.Birds=session.Query();
tx.Commit();
}

查询不需要在同一事务中执行,但没有理由不执行。也就是说,这不是必须的,但用其他方法做这件事需要做更多的工作。

奇怪的是,当使用nhibernate profiler进行测试时,我倾向于同意您的看法,但从我阅读的大量文档中,比如这个问题:似乎它说您确实需要将东西放入事务中以获得二级缓存。这就是我有点困惑的原因。据我所知,您确实需要在ITransaction中进行读取。我的回答是,他们不必是在一个单一的交易,这就是我如何解释你的问题。我的观点仍然是一样的(我认为即使没有任何事务,它也能工作),也就是说在你最后的评论中,既然问题中列出了用例,为什么你要创建多个事务