Я пытаюсь установить уровень изоляции транзакции в Dapper с помощью SqlBuilder
, но, похоже, не работает.
var builder = new SqlBuilder();
var sqlStatement = builder.AddTemplate(@"
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM Users
SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
conn.Query<User>(sqlStatement.RawSql);
Но это работает:
conn.Execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
var result = conn.Query<User>(sqlStatement);
conn.Execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED");
Я подумал, что это возможно, потому что с SqlBuilder
Dapper создает динамический SQL и выполняет с sp_executesql
хранимой процедурой.
Чтобы подтвердить свою гипотезу, я попробовал следующие операторы SQL:
exec sp_executesql N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED'
После этого заявления я запросил sys.dm_exec_sessions
, чтобы проверить мое соединение, и он все еще показывает ReadCommitted
, который является уровнем изоляции по умолчанию в моей базе данных.
Есть ли способ обойти установку уровня транзакции (или любого другого оператора SET
) в отдельном .Execute
? Или, может быть, специальный способ использовать оператор SET
в sp_executesql
?