如何使用 dapper 按位置将参数传递给存储过程?

P.P*_*rre 5 c# parameters dapper

using (SqlConnection connection = new SqlConnection(ConnectionString))
{
   Train result = connection.Query<Train>("Trains.AwesomeSauce", new { TrainId =  "TRN001", CurrentTrack = "TR001"}, commandType: CommandType.StoredProcedure).FirstOrDefault<Train>();
}
Run Code Online (Sandbox Code Playgroud)

上面的方法有效,但我想传递参数而不实际说 this = that。下面的方法不起作用我收到一条错误消息

附加信息:过程或函数“AwesomeSauce”需要参数“@TrainId”,但未提供该参数

代码:

public void TestMethod5()
{
    using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
        List<string> parameters = new List<string> { "TRN001", "TR001" };
        var list = connection.Query<Train>("Trains.Awesomesauce", new { parameters}, commandType: CommandType.StoredProcedure).FirstOrDefault<Train>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了下面的代码,但得到了相同的结果

过程或函数“AwesomeSauce”需要参数“@TrainId”,但未提供该参数

错误。

public void TestMethod5()
{
    using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
        var dictionary = new object[] { "TRN001","TR001"}
        .Select((item, ind) => new { ind = ind.ToString(), item })
        .ToDictionary(item => item.ind, item => item.item);
        DynamicParameters p = new DynamicParameters(dictionary);
        Train train = connection.Query<Train>("Trains.Awesomesauce", param: p, commandType: CommandType.StoredProcedure).FirstOrDefault<Train>();
    }
}
Run Code Online (Sandbox Code Playgroud)