Dapper动态参数

Dapper dynamic parameter

我正在使用 dapper 和 dynamicParameters 从 Web API 项目 (.NET 5) 中的 SQL 服务器获取数据。

大部分时间都没有问题,但有时会出现以下错误

Procedure or function MySP has too many arguments specified.

我怀疑由于同时请求,参数重复。这个问题有解决办法吗?

string sp = "MySP";

if (ADOFunctions.IsConncetionReadyToOpen(Connection))
{
    await Connection.OpenAsync();
}

var queryParameters = new DynamicParameters();
queryParameters.Add("@Date", dateTime.Date);
queryParameters.Add("@ClientRef", clientRef);
queryParameters.Add("@orderRefs", orderRefList);

var countLimitation = await Connection.QueryAsync<UnityExhibitionOrdersInfo>
   (sql: sp, param: queryParameters, commandType: System.Data.CommandType.StoredProcedure);

foreach (var item in countLimitation)
{
    if (item.Sold > item.Limit)
    {
        returnVal.Message += $"error ";
        returnVal.Result = false;
    }
}

首先,需要注意的是,这里不需要DynamicParameters;一个简单的:

new { dateTime.Date, ClientRef = clientRef, orderRefs = orderRefList }

对于参数来说应该绰绰有余,因为这是一个简单的用法,但是:无论哪种方式,您的 queryParameters 对象都是本地的而不是共享的(这很好)。这 应该 绝对可以正常工作 - 那么我的怀疑是:“Connection 是否以某种方式在同一请求的请求/并发异步流之间共享?” (绝对不能是;ADO.NET 连接不是线程安全的,不适合并发访问)。