为什么 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
)
即使我使用相同的 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
)