我正在调查我们的应用程序是否存在使用不正确的隔离级别进行数据库连接的问题。我们的应用程序是一个使用SQL Server 2005的.Net 3.5数据库应用程序。
我发现当连接返回到连接池时,连接的隔离级别没有被重置(请参见这里),我也很惊讶地在这篇博客文章中读到,每个新创建的TransactionScope都会分配自己的连接池。
我们的数据库更新(通过业务对象)在TransactionScope内完成(为每个业务对象图更新创建一个新的TransactionScope)。但是我们的获取操作不使用明确的事务。因此,我想知道我们是否可能遇到这样一种情况,即我们的获取操作(应该使用默认的隔离级别 - Read Committed)将重用从池中用于更新的连接,并继承更新隔离级别(RepeatableRead)?或者我们的更新是否保证使用不同的连接池,因为它们被包装在TransactionScope中?
谢谢您提前的帮助,
Graham
TransactionOptions
和TransactionScope
的创建,对吗?例如(通过链接更易读:http://pastie.org/10314190):`TransactionOptions op = new TransactionOptions(); op.IsolationLevel = IsolationLevel.ReadCommitted; using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew, op)) { /* ...在此处完成您的工作... */ tx.Complete(); }` - T.J. Crowder