我TransactionScope
在高级别使用 s 来包装一些与数据库建立多个连接的高级代码。
read uncommitted
我调用的函数之一是通用读取,用于需要隔离级别的只读函数。但在某些情况下,它被用作大型更新操作的一部分,aread committed
会更合适。
在事务范围内调用函数的最高级别,我应该能够为事务设置隔离级别吗?
我TransactionScope
在高级别使用 s 来包装一些与数据库建立多个连接的高级代码。
read uncommitted
我调用的函数之一是通用读取,用于需要隔离级别的只读函数。但在某些情况下,它被用作大型更新操作的一部分,aread committed
会更合适。
在事务范围内调用函数的最高级别,我应该能够为事务设置隔离级别吗?
您可以在 TransactionScope 本身上设置隔离级别。你是这个意思吗?
using (var txn = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadUncommitted
}
))
{
// Your LINQ to SQL query goes here
}
(从我的博客文章中窃取的代码在这里。)
您可以在连接级别和语句/事务级别定义事务隔离级别。
如果我正确理解您的场景,我会考虑仅在您的特定更新查询之前调整事务隔离级别,如果给定连接中的大多数其他活动将是只读活动。
请记住,SQL Server 的默认隔离级别是 Read Committed,因此如果您在连接级别设置不同的隔离级别,那么您需要在更新之前切换到事务/语句级别的 Read Committed。
当然要考虑的一件事是保持默认隔离级别不变。您认为 Read Committed 不适合您的通用读取活动是否有特定原因?
有道理?如果您需要进一步说明,请告诉我。
干杯,约翰
根据评论更新。
公平地说,如果您正在开发一个高端 OLTP 数据库,您可能希望查看一种称为行版本控制的 SQL Server 技术/原理。可以这么说,这将允许您读取某个版本的记录。使用此类技术时 tempdb 有开销,但如果您使用足够的硬件,那么它可能是合适的。以下白皮书是 SQL Server 行版本控制/快照隔离的出色指南