C# 使用事务Scop时重置隔离级别

C# 使用事务Scop时重置隔离级别,c#,transactions,transactionscope,C#,Transactions,Transactionscope,我们将隔离级别设置为readuncommitted,如下所示 TransactionOptions to = new TransactionOptions(); to.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted; using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Req

我们将隔离级别设置为readuncommitted,如下所示

    TransactionOptions to = new TransactionOptions();
    to.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
    using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew, to))
    {
       // Do Stuff
       transaction.Complete();
    }
问题是,一旦连接返回到池中,它就不会被重置回默认隔离级别,我知道这是通过设计()实现的。因此,当事务完成时,任何重用池中连接的操作都将以读取未提交隔离级别运行

我尝试使用SqlCommand调用
“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”
,但无法保证它将重用池中的相同连接。
//Do Stuff
中的任何内容都不会公开底层连接


如果以前运行过此代码,是否可以在所有对DB的调用上重置隔离级别而不显式设置隔离级别?

对于您在此事务范围内使用的连接,我将使用不同的(可能是将池设置为false的,或只是摆弄应用程序名称的连接)。这样,这个连接就在其他连接的(不同的|否)池中结束,并且不会被其他代码意外地拾取。

简短回答:没有好的解决方案。我认为现在最好的做法是执行一个显式事务下的所有事务,因为这为您提供了一个保证隔离级别。永远不要使用隐式事务。

这是我们使用的方法。像追加空格这样“简单”的东西会使连接字符串“不同”,从而落入不同的池中。代码检查环境作用域隔离以确定使用哪个CS。它无论如何都不完美,但总比没有好。。