Dapper.Net:IEnumerable 参数throws exception:从对象类型System.Int64 []到已知的托管提供程序本机类型不存在映射

c# dapper in-subquery where-in

我在下面的代码中使用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 文档中看到Dapper有List支持,但我想知道List<long>是否受支持。

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

一般承认的答案

如果参数对象的类型为DynamicParameters,则使用try尝试传递列表似乎会发生异常。

我的解决方法是创建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();
}


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因