6

我的问题与使用休眠事务有关

transaction.Begin()下面有问题吗?还是只是多余的?

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

2 回答 2

8

在检查了来源之后,transaction.Begin()实际上是多余的——一个无害的无操作。

链接到源

于 2013-05-31T13:27:43.567 回答
3

beginTransaction正如它所说的开始交易,

另一方面

session.Transaction如果 null 将创建一个,则将返回当前活动事务。

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

如果ISession.Transaction在会话的生命周期内尚未创建事务时调用,会话将在该时间点创建一个新的事务对象,但不会开始它。当您调用ISession.BeginTransaction时,会话将查看它们是否已经是之前已创建但尚未完成的事务对象。如果是这样,它将返回此事务对象。如果没有,它将创建一个新的事务对象,开始它并存储对这个新对象的引用。

在事务完成时,事务对象通知它所属的会话它已完成,会话将在该会话上释放其对事务对象的引用。ISession.Transaction随后对or的任何调用都 ISession.BeginTransaction将导致创建新的事务对象。

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

请参阅文档。

于 2013-05-31T11:48:54.677 回答