This question already has answers here:
SQL Server: Isolation level leaks across pooled connections

(4个答案)


6年前关闭。





如下所示,我们将隔离级别设置为“读取未提交”。

    TransactionOptions to = new TransactionOptions();
    to.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
    using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew, to))
    {
       // Do Stuff
       transaction.Complete();
    }


问题在于,一旦连接返回到池中,它就不会重置为默认的隔离级别,我知道这是设计使然(The transaction isolation level is not reset when you reuse a connection from the connection pool)。因此,当事务完成时,任何重用该池中的连接的操作都将以“读取未提交”隔离级别运行。

我尝试使用SqlCommand调用"SET TRANSACTION ISOLATION LEVEL READ COMMITTED",但是无法保证它将重用来自池的相同连接。 // Do Stuff中的任何内容均不暴露基础连接。

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

最佳答案

I concerned myself with this problem a while ago.简短答案:没有好的解决方案。我认为现在是在显式事务下执行所有操作的最佳实践,因为这为您提供了有保证的隔离级别。切勿使用隐式事务。

关于c# - 使用Transaction Scop时重置隔离级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18146860/

10-10 13:06