我正在尝试在.NET/C#中为事务设置事务隔离级别。我使用以下代码来设置事务:
using (var db = new DbContext("ConnectionString"))
{
using (var transaction = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions() { IsolationLevel = IsolationLevel.Snapshot }))
{
...code here
transaction.Complete();
}
}使用SQL Server事件探查器,这将生成以下内容:
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed当我特别请求'snapshot‘时,为什么它将隔离级别设置为'read committed’?
已为有问题的数据库打开快照隔离。
此“已提交读取”正被另一个长时间运行的事务阻塞。
在长时间运行的事务期间,在SQL Server Management Studio中运行以下代码可以很好地工作,但上面的代码会被阻塞,因为隔离级别与我指定的隔离级别不同。
USE <database>;
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
BEGIN TRANSACTION;
GO
<SELECT STATEMENT>
GO
COMMIT TRANSACTION;
GO为什么?
发布于 2015-07-08 03:33:05
new TransactionScope所做的全部工作就是设置Transaction.Current。这就是它所做的一切。现在,任何想要支持事务的人都可以查看该属性并登记。通常的DbConnection类在打开时登记。显然,在此特定作用域下,您的代码不会打开连接。
System.Transactions没有内置的对更改隔离级别的支持(这是一个可悲的遗漏)。你需要自己去做。
https://stackoverflow.com/questions/31273933
复制相似问题