2012-07-27 88 views
0

如果我新建一些DataContexts,讀取一些數據,然後只將SubmitChanges包裝到TransactionScope中,該怎麼辦?我正確使用TransactionScope和DataContext嗎?

string conn1 = GetConn1(); 
string conn2 = GetConn2(); 
using (DataContext1 dc1 = new DataContext1(conn1)) 
{ 
    List<Customer> customers = ReadSomeData(dc1); 
    ModifySomeCustomers(customers); //performs local modification to Customer instances 

    using (DataContext2 dc2 = new DataContext2(conn2)) 
    { 
    List<Order> orders = ReadSomeData(dc2); 
    ModifySomeOrders(orders); //performs local modification to Order instances 

    using (TransactionScope scope = new TransactionScope()) 
    { 
     dc1.SubmitChanges(); 
     dc2.SubmitChanges(); 
     scope.Complete(); 
    } 
    } 
} 

第一次SubmitChanges調用預計將從池中獲取連接並在該範圍內徵用該連接。 MS DTC已啓用 - 第二次SubmitChanges調用預計會將事務提升爲「分佈式」,從池中獲取連接並在該範圍內佔用該連接。

我擔心ReadSomeData可能會使連接處於打開狀態,因此SubmitChanges不會從池中獲取連接,因此也不會在範圍內徵用連接。

+0

只是爲了澄清:你爲什麼使用兩個數據上下文?兩個數據庫? – Pleun 2012-07-27 19:06:58

+0

@Pleun是的,兩個數據庫。 – 2012-07-27 19:16:05

回答

2

SubmitChanges將參加TransactionScope

如果SubmitChanges找到一個環境事務,它會將該事務記錄到該事務中,否則它會在SubmitChanges方法的生命週期中自行創建事務。

關於SubmitChanges中的交易處理有MSDN Article