Nhibernate session.BeginTransaction()与transaction.Begin()
我的问题与使用nhibernate事务有关
transaction.Begin()
下面是一个问题吗? 还是多余的?
using (var transaction = session.BeginTransaction()) { transaction.Begin(); action(); transaction.Commit(); }
在检查源之后, transaction.Begin()
实际上是多余的 – 一个无害的无操作。
链接到源
beginTransaction
因为它开始一个事务,
另一方面
session.Transaction
将返回当前活动事务,如果null将创建一个。
NHibernate会话跟踪当前活动(未提交或回滚)事务。
如果在会话的生命周期内尚未创建任何事务时调用ISession.Transaction
,则会话将在该时间点创建新的事务对象,但不会再开始。 当您调用ISession.BeginTransaction
,会话将查看它们是否已经是之前创建但尚未完成的事务对象。 如果是这样,它将返回此事务对象。 如果没有,它将创建一个新的事务对象,开始它并存储对这个新对象的引用。
在事务完成时,事务对象通知它已完成的会话,会话将在该会话上释放对事务对象的引用。 随后对ISession.Transaction
或ISession.BeginTransaction
任何调用都将导致创建新的事务对象。
NHibernate不支持对多个事务重用事务对象(这种行为可能与Hibernate不同,Hibernate似乎支持重用事务对象)。
请参阅此文档。