3

我在以下代码中针对 SQL Server 2008 R2 使用 Dapper.Net 来传递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[]

4

1 回答 1

3

如果参数对象的类型为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();
}
于 2013-04-27T23:31:04.343 回答