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

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...