为什么我的交易没有升级到DTC?

我的机器上禁用DTC。 我的理解是这个代码应该失败,因为它在同一个事务中使用了两个数据上下文。 那么,它为什么有用呢? (注意:我尝试使用.NET 3.5和.NET 4.0。)

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(); } } 

两者之间的连接字符串是否不同? 如果没有,可能是他们都在同一个底层连接池中重用相同的连接,从而无需升级到DTC?

我不相信你在post中使用了两种不同的语境。
此外,我的理解是,如果数据库连接是在同一台机器上的同一个数据库 ,那么就没有必要升级到DTC。 当在事务中使用两个不同的数据库服务器时,会发生升级。

您的数据库连接不是嵌套的。 它们是顺序使用的。 将一个程序粘在另一个程序中再试一次。