2013-04-27 52 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(); 
} 
相關問題