Ado.net事务范围、NHibernate和多个服务器

Ado.net事务范围、NHibernate和多个服务器,nhibernate,transactions,Nhibernate,Transactions,我目前正在开发一个企业解决方案,该解决方案承载多个应用程序,因此我实现了NHibernate以与多个会话工厂合作。我创建了一个自定义部分,如: <hibernate-sessionFactories> <sessionFactories> <clear/> <add name="Server1" factoryConfigPath="~/SessionFactoryConfigurations/Server1.conf

我目前正在开发一个企业解决方案,该解决方案承载多个应用程序,因此我实现了NHibernate以与多个会话工厂合作。我创建了一个自定义部分,如:

  <hibernate-sessionFactories>
    <sessionFactories>
      <clear/>
      <add name="Server1" factoryConfigPath="~/SessionFactoryConfigurations/Server1.config"/>
      <add name="Server2" factoryConfigPath="~/SessionFactories/Server2.config" />
    </sessionFactories>
  </hibernate-sessionFactories>
因此,根据会话工厂配置名称,我得到了正确的会话。对于事务性事务,我希望使用System.Transactions.TransactionScope,这样我就可以进行“嵌套”事务,如:

using(var scope = new TransactionScope(System.Transactions.TransactionScopeOption.Required))
{
  using(var scope = new TransactionScope(System.Transactions.TransactionScopeOption.Required))
  {
  }
}
这样做会不会没有问题?由于我使用的是多服务器,事务作用域如何知道在哪台服务器上登记事务?是否有更好的方法可以轻松处理嵌套事务来进行事务管理


你明白我的问题吗?;)

TransactionScope将根据实际使用的Ado.Net连接自动确定这一点。如果您的数据库服务器支持两阶段提交(通过MSDTC),并且您支持应用程序服务器和数据库服务器之间的全局事务,那么这将使您在数据库服务器之间实现两阶段提交

我更喜欢以声明的方式使用。但我必须承认,我没有在多个NHibernate会话工厂中使用它

using(var scope = new TransactionScope(System.Transactions.TransactionScopeOption.Required))
{
  using(var scope = new TransactionScope(System.Transactions.TransactionScopeOption.Required))
  {
  }
}