我正在尝试针对我的 Sql 2000 数据库为我的 Linq-to-Sql 操作设置一个简单的事务。使用 TransactionScope 它看起来像这样:
using (TransactionScope transaction = new TransactionScope())
{
try
{
Store.DBDataContext dc = new Store.DBDataContext();
Store.Product product = GetProduct("foo");
dc.InsertOnSubmit(product);
dc.SubmitChanges();
transaction.Complete();
}
catch (Exception ex)
{
throw ex;
}
}
但是,我不断收到以下错误:
合作伙伴事务管理器已禁用其对远程/网络事务的支持。(来自 HRESULT 的异常:0x8004D025)
但是,如果我使用传统交易设置交易,它可以正常工作。所以这很好用:
Store.DBDataContext dc = new Store.DBDataContext();
try
{
dc.Connection.Open();
dc.Transaction = dc.Connection.BeginTransaction();
Store.Product product = GetProduct("foo");
dc.InsertOnSubmit(product);
dc.SubmitChanges();
dc.Transaction.Commit();
}
catch (Exception ex)
{
dc.Transaction.Rollback();
throw ex;
}
finally
{
dc.Connection.Close();
dc.Transaction = null;
}
我想知道 TransactionScope 的幕后工作是否与我的第二个实现不同。如果没有,我不使用 TransactionScope 会失去什么?此外,有关导致错误的原因的任何指导也很好。我已经确认 MSDTC 正在 sql server 和我的客户端计算机上运行。