C# DataContext和CommitteableTransaction

C# DataContext和CommitteableTransaction,c#,linq-to-sql,transactions,datacontext,C#,Linq To Sql,Transactions,Datacontext,我知道Linq to Sql DataContext可以使用TransactionScope方式参与事务,该方式设置DataContext自动登记到的环境事务 但是,我需要使用CommitteableTransaction对象来使用显式事务。我还知道我可以显式地将DataContext上的DbTransaction属性设置为事务对象,这也符合我的目的,但我感兴趣的是找到一种方法,让DataContext登记到CommittableTransaction 在使用TransactionScope时,

我知道Linq to Sql DataContext可以使用TransactionScope方式参与事务,该方式设置DataContext自动登记到的环境事务

但是,我需要使用CommitteableTransaction对象来使用显式事务。我还知道我可以显式地将DataContext上的DbTransaction属性设置为事务对象,这也符合我的目的,但我感兴趣的是找到一种方法,让DataContext登记到CommittableTransaction


在使用TransactionScope时,必须有某种方法来完成此操作,因为环境事务已设置,DataContext已登记到它。即使是SqlConnection对象也会公开用于登记到CommitteableTransaction的登记事务方法。但是,我无法找到一种方法让DataContext显式登记到CommittableTransaction。

Transaction.Current=yourCommittableTransaction。@GertArnold,这就是问题所在。我不能使用环境事务设置,它显式地与使用带有适当修饰符的TransactionScope一样好。深度嵌套的代码将作为我调用的结果被调用,它们自己使用上下文,因此将参与与我相同的事务。它们不使用TransactionScope,因此将自动登记。我知道我可以在嵌套代码中使用TransactionScope和Suppress,但这需要大量重构和QA。正如我所说,我可以使用DbTransaction属性,我也对CommitteableTransaction感兴趣,因为它是一个学术练习。那么我不理解你的问题。您似乎建议使用CommitteableTransaction模拟TransactionScope行为。在使用TransactionScope时,必须有某种方法来实现这一点。您想将连接排除在事务之外吗?我并不是在模仿TransactionScope。显然,对于TransactionScope,设置了Transaction.Current,但是DataContext必须做一些事情来登记到它,所以类似于ifTransaction.Current=空{this.EnglistTransactionTransaction.Current}。SqlConnection有一个事务处理方法,我正在尝试为DataContext找出一个类似的方法。