Nhibernate session.BeginTransaction()与transaction.Begin()

时间:2013-05-31 11:43:00

标签: c# nhibernate transactions

我的问题与使用nhibernate交易有关

问题低于transaction.Begin()吗?或者只是多余的?

using (var transaction = session.BeginTransaction())
{
    transaction.Begin();
    action();
    transaction.Commit();
}

2 个答案:

答案 0 :(得分:8)

检查来源后,transaction.Begin()实际上是多余的 - 无害的无操作。

link to source

答案 1 :(得分:3)

beginTransaction因为它开始交易,

另一方面

如果null将创建一个,那么

session.Transaction将返回当前活动的事务。

NHibernate会话跟踪当前活动(未提交或 回滚)交易。

如果在尚未进行任何交易时致电ISession.Transaction 会议将在会议期间创建 在该时间点创建一个新的事务对象,但不会开始 还没完成。当您致电ISession.BeginTransaction时,会话将会看到 如果它们已经是之前创建的事务对象, 但尚未完成。如果是这样,它将返回此事务对象。 如果没有,它将创建一个新的事务对象,开始它并存储一个 引用这个新对象。

在事务完成时,事务对象通知会话 它已经完成的所有,会议将在该会议上完成 释放它对事务对象的引用。以下任何电话 ISession.TransactionISession.BeginTransaction会导致{。}} 创建一个新的交易对象。

NHibernate不支持重用事务对象 一个事务(这种行为可能与Hibernate不同,后者 似乎支持重用事务对象。)

参考this文件。