问题描述
即使我使用相同的sql连接,但如果在一个调用中分配context_info,则在下一个调用中会丢失它。
这是为什么?如何确保为其他调用保留context_info?
请参阅以下我的最小再现:
using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
await using var connection = new sqlConnection(_configuration.ConnectionString);
var parameters = new
{
ContextInfo = Guid.NewGuid().ToByteArray();
};
// This assigns correctly
var first = await connection.QuerySingleAsync($@"
SET CONTEXT_INFO @{nameof(parameters.ContextInfo)};
SELECT CONTEXT_INFO();",parameters);
// This is null
var second = await connection.QuerySingleAsync("SELECT CONTEXT_INFO();");
scope.Complete();
解决方法
您不是自己打开连接。这意味着Dapper将负责在每次调用上打开和关闭连接。这意味着第二个呼叫在不同的(逻辑)连接上。
尝试在任何Dapper调用之前添加connection.Open();
(或者,当然可以添加OpenAsync
)