Nhibernate 多个会话工厂中的TransactionScope

Nhibernate 多个会话工厂中的TransactionScope,nhibernate,distributed-transactions,Nhibernate,Distributed Transactions,我需要在三个数据库中执行分布式事务。为此,我在服务中注入了三个会话工厂。我使用以下代码管理交易: using(var ts = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions() { IsolationLevel = RepeatableRead })) using(var session1 = _sessionFactory1.OpenSession()) using(var tr

我需要在三个数据库中执行分布式事务。为此,我在服务中注入了三个会话工厂。我使用以下代码管理交易:

using(var ts = new TransactionScope(TransactionScopeOption.RequiresNew, 
new TransactionOptions() { IsolationLevel = RepeatableRead }))
using(var session1 = _sessionFactory1.OpenSession())
using(var tran1 = session1.BeginTransaction()
using(var session2 = _sessionFactory2.OpenSession())
using(var tran2 = session2.BeginTransaction()
using(var session3 = _sessionFactory3.OpenSession())
using(var tran3 = session3.BeginTransaction()
{
     //Entity manipulation
     tran1.Commit();
     tran2.Commit();
     tran3.Commit();
     ts.Complete();
}
wich工作得很好,但问题是,如果我在事务完成之前发出return语句,第二个会话工厂将进入不一致状态,并且在下一次调用中,当我尝试打开会话时会引发异常:

分布式事务完成。将此会话登记到新的 事务或空事务


我需要嵌套结构,因为我在实体操作部分发出了数量不确定的命令,每个命令都在三个数据库中进行更改。

如果在,它可以声明退出原始会话的使用并传递给以下用户,同样可以使用以前关闭的会话所需的任何信息

Client client;
using(var session1 = _sessionFactory1.OpenSession())
{
     ...
     client = session1.Get<Client>(myClientId);

     ...
}

using(var session2 = _sessionFactory2.OpenSession())
{   
     ...
     product = _session2.Load<Product>(myProductId);
     product.ClientId = client.Id;
     ...
}