NHibernate - 只选择的最佳实践

Zot*_*ote 5 nhibernate transactions

A对我的MVC应用程序有一个动作,它有一个id并返回一个人的名字.

最佳做法是什么?我正在关注NHProf提示,但代码听起来有点奇怪或者对我而言.

using (var session = Helper.SessionFactory.OpenStatelessSession())
{
    using (var tran = session.BeginTransaction(IsolationLevel.ReadCommitted))
    {
        return session.Query<Person>().Where(x => x.Id == id).Select(x => x.Name).SingleOrDefault();
        tran.Rollback();
    }
}
Run Code Online (Sandbox Code Playgroud)

ric*_*eym 4

我认为 NProf 警报页面解释得很好 -

http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions

基本上,它是说,如果您自己不管理事务,数据库将创建一个“隐式事务”并自动提交每个语句(包括查询)。误解是事务仅对插入/更新操作有用。

在上面的示例中,这并不是什么大问题,因为您的事务无论如何只执行一条语句。但是,如果您的方法正在运行多个语句,那么将它们包装在事务中将是一个很好的做法。