如果写下面的代码:错误返回。我喜欢建议:
http://stackoverflow.com/questions/794364/how-do-i-use-transactionscope-in-c
但只有错误更改:合作伙伴事务管理器已禁用其对远程/网络事务的支持来自HRESULT的异常:0x8004D025
我正在使用Windows Server 2003.
using (var stockMovementCtx = new StockMovementCtxDataContext())
{
using (var scope = new TransactionScope())
{
// do something....
}
scope.Complete();
}
但如果我改变了我的代码;一切都很好:
using (var stockMovementCtx = new StockMovementCtxDataContext())
{
// do something....
}
我如何解决以下错误。这非常重要。请帮帮我:(((
答案 0 :(得分:3)
TransactionScope
会提升为DTC。听起来DTC配置不正确,通常是由于防火墙的限制。在服务器之间尝试dtcping(重要:在两个方向)。
答案 1 :(得分:1)
DataContext
将所有操作包装在Transaction
内,因此在使用DataContext时不需要显式执行Transaction。阅读this。
http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx
using (var stockMovementCtx = new StockMovementCtxDataContext())
{
// do something....
//everything until this point is within the transaction.
stockMovementCtx.SubmitChange();
}
为什么我们需要TransactionScope?
TransactionScope使您可以执行dataabse之外的事务。假设您有一系列操作,如下所示,并且都是原子操作,需要在事务中执行。
1。)在表1中添加记录
2.)在表2中添加记录
3.)在磁盘上写一个新文件
4.)重命名磁盘上的文件X
5.)表3中的更新文件记录
如果使用SqlTransaction,则只有操作1,3和5可以参与事务,但3和4不能,因为它们根本不涉及数据库。在这种情况下,TrasanctionScope可以帮助您。 TransactionScope利用MSDTC(Distributed Trasanction协调器),可以帮助您进行数据库上下文之外的事务。您可以在TransactionScope事务中包装所有五个操作,以原子方式执行它们。值得注意的是,TransactionScope支持嵌套事务,这意味着一个事务块可以包含多组事务。