保存,更新或删除时如何确保NHibernate在事务中?

时间:2010-05-07 14:03:06

标签: nhibernate transactions

我想确保,当我使用Fluent NHibernate将任何数据保存到数据库时,操作将在事务中执行。有没有办法通过拦截器检查事务是否处于活动状态?或任何其他事件机制?

更具体地说,我正在使用System.Transaction.TransactionScope进行事务管理,只是想阻止自己不使用它。

4 个答案:

答案 0 :(得分:1)

我没试过,但我认为你可以创建一个实现IFlushEventListener的监听器。类似的东西:

    public void OnFlush(FlushEvent @event)
    {
        if (!@event.Session.Transaction.IsActive)
        {
            throw new Exception("Flushing session without an active transaction!");
        }
    }

当OnFlush被调用时,我并不清楚(并且Google没有帮助)。也可能存在可以将IsActive设置为true的隐式事务。

答案 1 :(得分:1)

如果您的代码中有一个构建会话的位置,您可以在那里启动事务并一次解决问题。

答案 2 :(得分:0)

如果您一直使用Spring.Net进行事务处理,则可以使用匿名内部对象来确保您的DAO / ServiceLayer对象始终使用其服务方法的TransactionAdvice进行公开。 有关示例,请参阅the spring documentation

答案 3 :(得分:-1)

到底是什么?如果您没有在交易中执行,NHProf会给您警告。一般来说,无论如何你应该开放这个工具......