Dapper.Net: IEnumerable paramètre renvoie une exception: aucun mappage n'existe à partir du type d'objet System.Int64 [] vers un type natif de fournisseur géré connu

c# dapper in-subquery where-in

Question

J'utilise Dapper.Net contre SQL Server 2008 R2 dans le code suivant pour transmettre un paramètre List<long> pour exécuter une requête SQL comportant une clause WHERE IN, mais j'obtiens l'exception:

Aucun mappage n'existe du type d'objet System.Int64 [] vers un type natif de fournisseur géré connu.

Au fait, company_name_id et industry_id sont des types 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();
}

J'ai vu dans la documentation github que Dapper a un support List, mais je me demandais si List<long> est supporté.

Selon l'ancienne documentation sur https://code.google.com/p/dapper-dot-net/, il semble que seul int [] soit pris en charge.

Réponse acceptée

Il semble que l'exception se produit lorsque vous essayez de passer une liste si l'objet paramètre est de type DynamicParameters .

Ma solution de contournement a été de créer un objet param en tant qu'objet anonyme ; le code suivant fonctionnait à la place.

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi