2011-05-06 50 views
9

DTC在我的機器上被禁用。我的理解是,這段代碼會失敗,因爲它在同一個事務中使用兩個數據上下文。那麼,它爲什麼會起作用? (注:這個我試過用.NET 3.5和.NET 4.0)爲什麼我的交易不會升級到DTC?

using (TransactionScope transactionScope = new TransactionScope()) 
{ 
    UpdateEta(); 
    UpdateBin(); 

    transactionScope.Complete(); 
} 

下面是被調用的方法DAL:

public static void UpdateBin(Bin updatedBin) 
{ 
    using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString)) 
    { 
     BinRecord binRecord = (from bin in dataContext.BinRecords 
           where bin.BinID == updatedBin.BinId 
           select bin).FirstOrDefault(); 

     binRecord.BinID = updatedBin.BinId; 
     binRecord.BinName = updatedBin.BinName; 

     dataContext.SubmitChanges(); 
    } 
} 

public static void UpdateEta(Eta updatedEta) 
{ 
    using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString)) 
    { 
     EtaRecord etaRecord = (from eta in dataContext.EtaRecords 
           where eta.ID == updatedEta.ID 
           select eta).FirstOrDefault(); 

     etaRecord.ID = updatedEta.ID; 
     etaRecord.Title = updatedEta.Title; 

     dataContext.SubmitChanges(); 
    } 
} 
+0

大問題Horn先生。 – 2011-05-06 16:53:28

回答

6

兩者之間不同的連接字符串?如果不是這樣,那麼它們可能會重複使用同一個基礎連接池中的相同連接,從而無需升級到DTC?

+1

SQL 2008 _will_在字符串相同的情況下重新使用連接。我不相信2005年,並會促進交易... – ShaneBlake 2011-05-06 17:12:37

+0

我認爲就是這樣,夥計們。我確實使用相同的連接字符串,我確實使用SQL Server 2008。然而,我不能依靠這種行爲,因爲如果底層連接不可用(從連接池),那麼也許我們就會有DTC問題。謝謝! – 2011-05-06 17:21:58

1

我不相信你是使用兩種不同背景從您的文章。
再說這是我的理解是,如果數據庫連接是相同的數據庫在同一臺機器上,然後就沒有必要升級到DTC。在事務中使用兩個不同的數據庫服務器時會發生升級。

0

您的數據庫連接不嵌套。它們被順序使用。將一個程序粘在另一個程序中,然後重試。

相關問題