c# - Dapper.Net : IEnumerable<long> parameter throws exception: No mapping exists from object type System. Int64[] 到已知托管提供程序 native 类型

标签 c# dapper where-in in-subquery

我在以下代码中针对 SQL Server 2008 R2 使用 Dapper.Net 来传递 List<long>参数来运行具有 WHERE IN 子句的 SQL 查询,但我得到异常:

不存在从对象类型 System.Int64[] 到已知托管提供程序 native 类型的映射。

对了,company_name_id和industry_id是bigint类型。

var parameters = new DynamicParameters();
parameters.Add("@companyNameId", entry.Id);
parameters.Add("@industryIds", deletedIndustryIds);
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["server1"].ConnectionString))
{
    connection.Open();
    connection.Execute("DELETE FROM company_name_industry_map WHERE company_name_id = @company_name_id and industry_id IN @industryIds", param: parameters);
    connection.Close();
}

我确实在 github 上看到了 documentation Dapper 支持 List,但我想知道 List<long>支持。

根据 https://code.google.com/p/dapper-dot-net/ 上的旧文档似乎只支持 int[]

最佳答案

如果参数对象的类型为 DynamicParameters,那么您尝试传递列表时似乎会发生异常。

我的解决方法是将 set param 对象创建为一个匿名对象;以下代码可以代替。

using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["server1"].ConnectionString))
{
    connection.Open();
    connection.Execute("DELETE FROM company_name_industry_map WHERE company_name_id = @company_name_id and industry_id IN @industryIds",
new { company_name_id = entry.Id, industryIds = deletedIndustryIds });
    connection.Close();
}

关于c# - Dapper.Net : IEnumerable<long> parameter throws exception: No mapping exists from object type System. Int64[] 到已知托管提供程序 native 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257195/

相关文章:

c# - ICollection/ICollection<T> 歧义问题

c# - 安全正确的结构编码

c# - ASP.NET Core WebAPI 在返回集合时是否不支持延迟执行/延迟评估?

Mysql WHERE IN 映射

c# - 无法在 Android 上获取 SignalA 以连接到 SignalR 后端

c# - 在 .net 中制作单实例应用程序的最佳方法是什么?

dapper - 手动将列名与类属性映射

c# - 使用 Dapper 的 SQLite。分析列时出错。无法将 System.Int64 类型的对象转换为 System.Double 类型

c# - `WHERE … IN @xs` ,其中 @xs 参数是一个值列表 : Supported by ADO. NET?

mysql - 在mysql查询的地方