C# Nhibernate session.BeginTransaction()与transaction.Begin()的比较
我的问题与nhibernate事务的使用有关C# Nhibernate session.BeginTransaction()与transaction.Begin()的比较,c#,nhibernate,transactions,C#,Nhibernate,Transactions,我的问题与nhibernate事务的使用有关 事务处理.Begin()是否存在问题?还是只是多余的 using (var transaction = session.BeginTransaction()) { transaction.Begin(); action(); transaction.Commit(); } beginTransaction当它声明开始一个事务时 另一方面 session.Transaction将返回当前活动事务,如果null将创建一个活动事务
事务处理.Begin()
是否存在问题?还是只是多余的
using (var transaction = session.BeginTransaction())
{
transaction.Begin();
action();
transaction.Commit();
}
beginTransaction
当它声明开始一个事务时
另一方面
session.Transaction
将返回当前活动事务,如果null将创建一个活动事务
NHibernate会话跟踪当前活动(未提交或
回滚)事务
如果您在尚未处理任何事务时调用ISession.Transaction
在会话生命期内创建的会话将
在该时间点创建一个新的事务对象,但不会开始
还没有。当您调用ISession.BeginTransaction时,会话将看到
如果其已是以前创建的事务对象,
但尚未完成。如果是,它将返回此事务对象。
如果没有,它将创建一个新的事务对象,开始它并存储
对这个新对象的引用
事务完成时,事务对象通知会话
它所属的已完成的,会话将在其上
释放对事务对象的引用。以下任何电话
ISession.Transaction
或ISession.BeginTransaction
将导致
创建新的事务对象
NHibernate不支持将事务对象重用超过
一个事务(此行为可能与Hibernate不同,后者
似乎支持事务对象的重用)
请参阅文档。在检查源代码后,
transaction.Begin()
实际上是多余的-一个无害的禁止操作
将此添加为书签:阅读Ayende总是好的。。。但是在这种情况下,我的问题并没有得到一点令人困惑的回答……因此,如果会话中没有当前事务,那么beginTransaction只会创建一个新事务,否则会返回现有事务?那么,在这种情况下,后续事务.Begin()有什么影响呢?这是禁止行动吗?