【问题标题】:NHibernate with multiple databases and transactionsNHibernate 与多个数据库和事务
【发布时间】:2010-06-11 16:03:21
【问题描述】:

我们在理解如何最好地使用 NHibernate 时遇到了一些问题。我们通常拥有相对大量的非常小的(就表数量而言)SQL Server 数据库,而不是一个包含大量对象的数据库。

我们正在研究用于处理多个会话工厂的各种选项,并且可能会对此进行控制。但是,我们不确定如何将所有调用包装在单个事务中。使用手动数据访问,您只需将其全部包装在 TransactionScope 中,但我们不太愿意使用 NHibernate 执行此操作,因为它似乎喜欢处理自己的所有事务。

使用具有共享事务的多个数据库似乎是很多人希望使用 NHibernate 做的事情。

我们是不是完全找错了树?

【问题讨论】:

  • 您可能想查看 NHibernate Sharding 项目的源代码以获得一些想法,因为听起来您有一个分片数据库。

标签: c# nhibernate transactions transactionscope


【解决方案1】:

您可以放心地使用TransactionScope。但是你也必须打开 NHibernate 事务。

例子:

using (var ts = new TransactionScope())
using (var session1 = sessionFactory1.OpenSession())
using (var tx1 = session1.BeginTransaction())
using (var session2 = sessionFactory2.OpenSession())
using (var tx2 = session2.BeginTransaction())
{
    //Do work...
    tx1.Commit();
    tx2.Commit();
    ts.Complete();
}

【讨论】:

  • 我们从哪里引用 TransactionScope?
  • TransactionScope 在 System.Transactions 中。你可以在任何地方实例化一个。顺便说一句,在我接受之前,我只是在等待测试这个答案的时间!
  • @Pingpong 不知道,看MySql是否支持事务作用域。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多