Dapper.Net: IEnumerable parámetro throws exception: no existe mapeo desde el tipo de objeto System.Int64 [] a un tipo nativo de proveedor gestionado conocido

c# dapper in-subquery where-in

Pregunta

Estoy usando Dapper.Net contra SQL Server 2008 R2 en el siguiente código para pasar un parámetro List<long> para ejecutar una consulta SQL que tenga una cláusula WHERE IN, pero obtengo la excepción:

No existe ninguna asignación del tipo de objeto System.Int64 [] a un tipo nativo de proveedor gestionado conocido.

Por cierto, company_name_id y industry_id son tipos 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();
}

Vi en la documentación de github que Dapper tiene soporte para List, pero me preguntaba si List<long> es compatible.

De acuerdo con la documentación anterior en https://code.google.com/p/dapper-dot-net/ , parece que solo se admite int [] .

Respuesta aceptada

Parece que ocurre la excepción que usas, intenta pasar una lista si el objeto parámetro es de tipo DynamicParameters .

Mi solución fue crear el objeto set param como un objeto anónimo ; el siguiente código funcionó en su lugar.

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué