使用Transaction Scop时重置隔离级别 - c#

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

    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.简短答案:没有好的解决方案。我认为现在是在显式事务下执行所有操作的最佳实践,因为这为您提供了有保证的隔离级别。切勿使用隐式事务。

后台线程暂停程序上的新System.Transactions.TransactionScope() - c#

我有一些使用System.Transactions.TransactionScope的代码,即创建事务作用域的新实例只会暂停程序。没有异常或消息,程序仅停止,Visual Studio返回代码编辑模式。这个过程完全消失了。事件查看器中没有异常,消息或事件。我有另一个使用TransactionScope的测试应用程序,没有问题,因此它不应该是环境问题。我只是不…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4