2010-06-11 57 views
2

我们在理解如何最好地使用NHibernate时遇到了一些问题。我们通常有相当大数量的SQL Server数据库相对较小(以表数量计),而不是一个拥有大量对象的数据库。有多个数据库和事务的NHibernate

我们正在寻找用于处理多个会话工厂的各种选项,并且可能会控制它。但是,我们不确定我们如何将所有调用包装在单个事务中。使用手动滚动的数据访问,你可以把它全部包装在一个TransactionScope中,但是我们有点不愿意用NHibernate来做这件事,因为它似乎喜欢处理它自己的事务。

在共享事务中使用多个数据库看起来像很多人想要用NHibernate做的事情。

我们是不是完全吠叫了错误的树?

+0

你可能要考虑NHibernate的分片项目的源就像你有一个分片数据库,以得到一些想法,因为它的声音。 – 2010-06-11 16:05:27

回答

3

您可以安全使用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(); 
} 
+0

我们从哪里引用TransactionScope? – learning 2010-07-23 10:28:07

+0

TransactionScope在System.Transactions中。你可以在任何地方立即安装。 顺便提一句,我只是等待时间来测试这个答案,然后再接受它! – Gaz 2010-08-06 13:33:20

+0

代码在MySql而不是SQL Server中工作吗? – Pingpong 2012-05-21 23:41:00