如下所示,我们将隔离级别设置为“读取未提交”。
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