【发布时间】: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))
{
}
}
这会没有问题吗?由于我正在使用多个服务器,事务范围如何知道在哪个服务器上登记事务?是否有更好的方法来轻松处理嵌套事务来进行事务管理?
你明白我的问题吗? ;)
【问题讨论】: