This question already has answers here:
SQL Server: Isolation level leaks across pooled connections
(4个答案)
6年前关闭。
如下所示,我们将隔离级别设置为“读取未提交”。
问题在于,一旦连接返回到池中,它就不会重置为默认的隔离级别,我知道这是设计使然(The transaction isolation level is not reset when you reuse a connection from the connection pool)。因此,当事务完成时,任何重用该池中的连接的操作都将以“读取未提交”隔离级别运行。
我尝试使用SqlCommand调用
如果以前已经运行过此代码,是否有必要重置隔离级别而不在所有对DB的调用上显式设置隔离级别?
(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