我的机器上禁用了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();
}
}
答案 0 :(得分:6)
两者之间的连接字符串是否不同?如果没有,可能是他们都在相同的底层连接池中重用相同的连接,从而无需升级到DTC?
答案 1 :(得分:1)
我不相信你在帖子中使用了两个不同的语境 此外,我的理解是,如果数据库连接在同一台机器上的同一个数据库,那么就不需要升级到DTC了。当事务中使用两个不同的数据库服务器时,会发生升级。
答案 2 :(得分:0)
您的数据库连接未嵌套。它们是顺序使用的。将一个程序粘在另一个程序中再试一次。