Dapper.Net:IEnumerable <long>参数抛出异常:从对象类型System.Int64 []到已知的托管提供者本机类型</long>不存在映射

时间:2013-04-27 21:49:51

标签: c# dapper where-in in-subquery

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

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

顺便说一下,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 []

1 个答案:

答案 0 :(得分:2)

如果参数对象的类型为 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();
}