【问题标题】:Ado.net transaction scope, NHibernate and multiple serversAdo.net 事务范围、NHibernate 和多个服务器
【发布时间】:2009-12-10 12:31:47
【问题描述】:

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

  <hibernate-sessionFactories>
    <sessionFactories>
      <clear/>
      <add name="Server1" factoryConfigPath="~/SessionFactoryConfigurations/Server1.config"/>
      <add name="Server2" factoryConfigPath="~/SessionFactories/Server2.config" />
    </sessionFactories>
  </hibernate-sessionFactories>

我实现了一个惰性单例会话提供程序,它按需实例化这些会话工厂。

我正在使用存储库模式。在持久化方法中,为了获取当前的 NHibernate 会话,我现在可以调用类似

ISession session = sessionProvider.GetCurrentSessionFrom(sessionFactoryConfigName);

因此,根据会话工厂配置名称,我得到了正确的会话。对于事务性的事情,我想使用 System.Transactions.TransactionScope,所以我可以有“嵌套”事务,例如:

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

这会没有问题吗?由于我正在使用多个服务器,事务范围如何知道在哪个服务器上登记事务?是否有更好的方法来轻松处理嵌套事务来进行事务管理?

你明白我的问题吗? ;)

【问题讨论】:

    标签: nhibernate transactions


    【解决方案1】:

    TransactionScope 将根据实际使用的 Ado.Net 连接自动确定这一点。这应该让您在数据库服务器之间进行两阶段提交(通过 MSDTC),如果它们支持它并且您 enabled/configured your environment 支持应用程序服务器和数据库服务器之间的全局事务。

    我更喜欢以声明方式使用Spring.Net to manage transactions。但我不得不承认我没有将它与多个 NHibernate 会话工厂一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2010-11-03
      • 2011-09-23
      相关资源
      最近更新 更多