【发布时间】:2013-08-11 09:29:54
【问题描述】:
我们将隔离级别设置为读取未提交,如下所示。
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 中的任何内容都不会暴露底层连接。
是否有没有在所有调用数据库时显式设置隔离级别的情况下重置隔离级别,以防万一之前运行过此代码?
【问题讨论】:
标签: c# transactions transactionscope