2010-06-11 30 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