Nhibernate读取/保存会话模式,具体的事务行为是什么

本文关键字:事务 是什么 读取 保存 会话 模式 Nhibernate | 更新日期: 2023-09-27 18:04:00

全部,

这是使用n-光纤会话读取/写入数据的模式:

using(var session = factory.OpenSession())
using(var tx = session.BeginTransaction())
{
    // all the code that uses the session goes here
    // use session to load and/or save entity
}

我的问题是:

当你启动一个事务时,它会在连接上启动一个数据库事务,但我没有看到相应的提交语句,相反,tx上的using语句会调用tx.Dispose((。查看n-hibernate源(来自使用SqlTransaction对象的AdoTransaction类(,底层事务对象从未被提交,而是被释放,如下所示那么,我们是否假设SqlTransaction提供程序将在处理之前调用commit这是ado.net的SqlClient提供程序的某个文档吗?

if (isDisposing)
{
    if (trans != null)
    {
        trans.Dispose();
        trans = null;
        log.Debug("IDbTransaction disposed.");
    }
    if (IsActive && session != null)
    {
        // Assume we are rolled back
        AfterTransactionCompletion(false);
    }
}

很明显,我缺少了一些东西,因为在调用tx.Dispose((时找不到刷新会话的代码。

Nhibernate读取/保存会话模式,具体的事务行为是什么

这里的想法是,你应该自己调用CommitTransaction作为using块的一部分,因为当垃圾收集器到达对象Dispose时,可能会出现事务本身引发错误的情况,在这种情况下,你不希望Dispose提交它,你只想处理它。