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.TransactionISession.BeginTransaction任何调用都将导致创建新的事务对象。

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

请参阅此文档。