有人可以通過使用Microsoft Data Access Application Block (DAAB)在多個連接對同一個數據庫打開時使用SQL輕量級事務管理器闡明幕後發生的情況嗎?NET TransactionScopes和SQL 2005輕量級事務管理器 - 多個連接相同的SPID?
通過下面的代碼,我們驗證了在打開'多個連接'到同一個數據庫時MSDTC確實不是必需的。
這是我測試的第一種方案:(其中TXN1和Txn2使用EntLib 4.1開到同一數據庫的連接,並調用不同的存儲過程)
using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
DAL1.Txn1();
DAL2.Txn2();
ts.Complete();
}
從探查跟蹤這表明,相同的連接SPID用於Txn1和Txn2。在調用Txn1()後,Sql SPID將被釋放回池中,並且Txn2()可以重新使用它。
然而,重複該實驗,此時保持的連接打開時:
using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
Database db1 = DatabaseFactory.CreateDatabase("db1");
DAL1.Txn1OnCon(db1);
Database db2 = DatabaseFactory.CreateDatabase("db1");
DAL2.Txn2OnCon(db2);
ts.Complete();
}
從探查觀看此表明2個交易是仍然使用相同的SPID。我期待TransactionScope
已升級到DTC,因爲應該要求分佈式事務來控制2個併發連接。我錯過了什麼?
感謝丹 - 這將意味着沒有一個1:1的相關性EntLib DAAB數據庫和物理連接之間。 – StuartLC 2010-09-08 06:40:09