为什么 SQL context_info 在第二次数据库调用时丢失?

Why is SQL context_info lost on second database call?

即使我使用相同的 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