2013-04-27 3 views
3

Я использую Dapper.Net для SQL Server 2008 R2 в следующем коде, чтобы передать List<long> параметр для запуска SQL-запроса с предложением WHERE IN, но я получаю исключение: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.

Моим обходным путем было создано множество объектов param как anonymous объект; вместо этого работал следующий код.

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(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^