我的问题与使用休眠事务有关
transaction.Begin()
下面有问题吗?还是只是多余的?
using (var transaction = session.BeginTransaction())
{
transaction.Begin();
action();
transaction.Commit();
}
我的问题与使用休眠事务有关
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
随后对or的任何调用都
ISession.BeginTransaction
将导致创建新的事务对象。
NHibernate 不支持对多个事务重用事务对象(这种行为可能与 Hibernate 不同,后者似乎支持重用事务对象)。
请参阅此文档。