我想为我的Sql 2000数据库的Linq-to-Sql操作设置一个简单的事务。使用的TransactionScope它看起来像这样:针对Sql Server 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和我的客户端机器上运行。
在弗洛林·拉扎后引用的DatabaseTransactionAdapter的伎俩。我将发布我的实现代码作为回应。 – 2008-11-26 15:44:01