在我的 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();
}
}
最佳答案
NHProf 警报页面很好地解释了我认为 -
http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
基本上它是说如果您不自己管理事务,数据库将创建一个“隐式事务”并为每个语句(包括查询)自动提交。误解是事务仅对插入/更新操作有用。
在上面的示例中,这不是什么大问题,因为您的交易无论如何都只执行一条语句。如果您的方法正在运行多个语句,那么将它们包装在一个事务中将是一个好习惯。
关于NHibernate - 选择的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533910/