Я использую Dapper.Net против SQL Server 2008 R2 в следующем коде, чтобы передать параметр List<long>
для запуска SQL-запроса с предложением WHERE IN, но я получаю исключение:
Нет сопоставления с типом объекта 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<long>
.
Согласно старой документации на https://code.google.com/p/dapper-dot-net/ , похоже, что поддерживается только int [] .
Кажется, что исключение случается, вы используете try для передачи списка, если объект параметра имеет тип 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();
}