2011-05-06 68 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

您的数据库连接不嵌套。它们被顺序使用。将一个程序粘在另一个程序中,然后重试。

相关问题