2013-04-27 81 views
3

我在以下代码中使用Dapper.Net对SQL Server 2008 R2传递List<long>参数来运行具有WHERE IN子句的SQL查询,但我得到以下异常:Dapper.Net:IEnumerable <long>参数抛出异常:不存在从对象类型System.Int64 []到已知的托管提供程序本机类型的映射

没有将对象类型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那小巧玲珑的具有列表的支持,但我想知道List<long>支持。

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

回答

2

看起来像是发生了异常,如果参数对象类型为DynamicParameters,您可以尝试通过列表。

我的解决方法是创建设置参数对象作为匿名对象;下面的代码代替了。

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(); 
} 
相关问题