可以像参数字典一样枚举 Dapper DynamicParameters 对象吗? [英] Can a Dapper DynamicParameters object be enumerated like a dictionary of parameters?
问题描述
我知道我可以将 ParameterDirection
与 Dapper.DynamicParameters 一起使用:
I know I can use a ParameterDirection
with Dapper.DynamicParameters:
var parameters = new DynamicParameters();
parameters.Add("iparam", 42);
parameters.Add("oparam", null, DbType.Int32, ParameterDirection.Output);
connection.Execute(sql, parameters);
但是我可以在使用 Dictionary
时这样做吗?
But can I do so when using a Dictionary<string, object>
?
var parameters = new Dictionary<string, object>();
parameters.Add("iparam", 42);
parameters.Add("oparam", /* ??? */ );
connection.Execute(sql, parameters);
或者,我如何遍历 DynamicParameters
以获得参数名称和值?
Alternatively, how may I iterate over a DynamicParameters
in order to get the parameter names and values?
原标题:
可以使用 ParameterDirection 添加带有 ParameterDirection 的 Dapper 参数吗?字典?
Can a Dapper parameter with ParameterDirection be added using a dictionary?
推荐答案
这似乎是 Dapper 中的一个错误.这被证实在最新的 NuGet 包中有效:
It appears to be a bug in Dapper. This is confirmed to work in the latest NuGet package:
foreach (var paramName in parameters.ParameterNames)
{
var value = ((SqlMapper.IParameterLookup)parameters)[paramName];
}
但是,它有点冗长.在本地使用 Dapper 源(不是 NuGet 包),我能够运行此代码没有错误(截至撰写时提交 b77e53):
However, it's a bit verbose. Locally using the Dapper source (not a NuGet package), I was able to run this code without error (As of writing that's commit b77e53):
foreach (var paramName in parameters.ParameterNames)
{
var value = parameters.Get<dynamic>(paramName);
}
根据 查尔斯Burns 的评论,它仍然抛出一个异常,这让我相信补丁还没有进入 NuGet.修复 Get<dynamic>
的提交是here一个>
According to Charles Burns' comment, it still throws an exception, which leads me to believe the patch hasn't made it into NuGet yet. The commit which fixes Get<dynamic>
is here
这篇关于可以像参数字典一样枚举 Dapper DynamicParameters 对象吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!