我正在尝试为我的Linq-to-Sql操作建立一个简单的事务,针对我的Sql 2000数据库。使用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和客户端机器上都在运行。