我想确保,当我使用Fluent NHibernate将任何数据保存到数据库时,操作将在事务中执行。有没有办法通过拦截器检查事务是否处于活动状态?或任何其他事件机制?
更具体地说,我正在使用System.Transaction.TransactionScope
进行事务管理,只是想阻止自己不使用它。
答案 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会给您警告。一般来说,无论如何你应该开放这个工具......