可以像参数字典一样枚举 Dapper DynamicParameters 对象吗? [英] Can a Dapper DynamicParameters object be enumerated like a dictionary of parameters?

查看:33
本文介绍了可以像参数字典一样枚举 Dapper DynamicParameters 对象吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道我可以将 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆