【问题标题】:Automatically mapping output parameters with Dapper使用 Dapper 自动映射输出参数
【发布时间】:2016-03-20 03:56:32
【问题描述】:

我一直在使用 Dapper 来调用存储过程并传递一个对象。例如:

如果我有一个对象:

public int ID { get; set; }    
public int Year { get; set; }

我可以创建这个对象并将它作为参数传递给我的Execute 调用。 Dapper 自动将所有这些属性映射到参数并执行存储过程。太棒了。

输出参数呢?如果我的对象如下所示,如何让 Dapper 使用输出参数值填充该属性?

public int ID { get; set; }    
public int Year { get; set; }
public int OutputParameter { get; set; }

输出参数是否必须添加为DynamicParameters

【问题讨论】:

  • 我还没有找到方法,所以这听起来像是扩展方法的工作?

标签: sql dapper


【解决方案1】:

类似这样的:

        DynamicParameters _params = new DynamicParameters();
        _params.Add("@newId", DbType.Int32, direction: ParameterDirection.Output);
        var result = connection.Execute("[dbo].YourProc", _params, null, null, CommandType.StoredProcedure);
        var retVal = _params.Get<int>("newId");

【讨论】:

  • 我现在就是这样做的。但是,我要求的是无需指定输出参数即可填充原始对象的能力。我不必手动添加参数来执行 SP。有没有办法告诉 Dapper 这是一个输出参数,执行后获取值。
【解决方案2】:
DynamicParameters _params = new DynamicParameters(new {
ID = 123,
Year = 2020,
OutputParameter = 0
});

_params.Add("OutputParameter", 0, direction: ParameterDirection.Output);
var result = connection.Execute("[dbo].YourProc", _params,  commandType: CommandType.StoredProcedure);
var retVal = _params.Get<int>("OutputParameter");

【讨论】:

    【解决方案3】:

    我首先找到了您的问题,但这里的答案没有帮助。不过,这个问题的答案对我来说非常好。如果对其他人有帮助,请发布它。我认为我没有足够的特权来实际链接这些问题。 https://stackoverflow.com/a/28727355/4172413

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2018-03-27
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多