NHibernate - 选择的最佳实践

标签 nhibernate transactions

在我的 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/

相关文章:

.net - NHibernate ISession Flush : Where and when to use it, 以及为什么?

transactions - 在 Redis 中,当存在没有关联的 EXEC 或 DISCARD 的 MULTI 时会发生什么?

c# - 使用 NHibernate 插入失败后 SQL 不可用

c# - 如何扩展 NHibernate 以支持更多的数据库?

javascript - CSS 过渡和 JS 同时切换

django - Django select_for_update不能在事务外部使用

java - 运行时异常是@ApplicationException(rollback=false) 但事务最终回滚

java - 如何提高spring mvc批量事务的性能

sql-server - 您如何解决 NHibernate 访问的 SQL Server 数据库实例中的死锁?

nhibernate - 从作用域引用的类型变量,但未定义