我在下面的代码中使用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 [] 。
答案 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();
}