Dapper 传递动态参数
Posted
技术标签:
【中文标题】Dapper 传递动态参数【英文标题】:Dapper passing dynamic param 【发布时间】:2013-01-17 08:21:58 【问题描述】:我目前正在为 Dapper 编写一个包装器。这个包装器强制每个查询都是一个存储过程。
在我的包装中,我这样称呼 Dapper(有问题):
public IEnumerable<T> Select<T>(string storedProcName, dynamic param)
IEnumerable<T> results;
using(var connection = new SqlConnection(_connectionString)
results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
return results;
当我尝试将“参数”传递给查询时,它告诉我“无法解析符号查询”。当我删除参数传递时,它工作正常。
谁能指出我正确的方向,以便我可以将动态参数(或类似的东西)传递给 Dapper?
【问题讨论】:
【参考方案1】:您只需将参数更改为类型对象,当您调用它时,您可以使用匿名类型来传递您的参数。
public IEnumerable<T> Select<T>(string storedProcName, object param)
IEnumerable<T> results;
using(var connection = new SqlConnection(_connectionString)
results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
return results;
那么你可以这样称呼它:
var results = query.Select<Entity>("spname", new Id = 2, Something = "test" );
【讨论】:
【参考方案2】:你可以把它扔掉:
results = connection.Query<T>(storedProcName,
(object)param, commandType: CommandType.StoredProcedure);
我再次怀疑dynamic
的智慧;我知道这是有原因的,但我怀疑它弊大于利。坦率地说,dapper 可以很好地处理 object
(“原因”是 IDE 问题,而不是语言问题)。
【讨论】:
以上是关于Dapper 传递动态参数的主要内容,如果未能解决你的问题,请参考以下文章