Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nhibernate session.BeginTransaction()与transaction.Begin()的比较_C#_Nhibernate_Transactions - Fatal编程技术网

C# Nhibernate session.BeginTransaction()与transaction.Begin()的比较

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将创建一个活动事务

我的问题与nhibernate事务的使用有关

事务处理.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()有什么影响呢?这是禁止行动吗?