Ich verwende Dapper.Net gegen SQL Server 2008 R2 im folgenden Code, um einen List<long>
-Parameter zu übergeben, um eine SQL-Abfrage auszuführen, die eine WHERE IN-Klausel hat, aber ich bekomme die Ausnahme:
Es existiert keine Zuordnung vom Objekttyp System.Int64 [] zu einem bekannten verwalteten nativen Providertyp.
By the way, company_name_id und industry_id sind Bigint-Typen.
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();
}
Ich habe in der Github- Dokumentation gesehen, dass Dapper List-Unterstützung hat, aber ich habe mich gefragt, ob List<long>
unterstützt wird.
Laut der älteren Dokumentation auf https://code.google.com/p/dapper-dot-net/ scheint nur int [] unterstützt zu werden.
Es scheint, als ob die Ausnahme auftritt, wenn Sie versuchen, eine Liste zu übergeben, wenn das Parameterobjekt vom Typ DynamicParameters ist .
Meine Problemumgehung war create set param object als anonymes Objekt; Der folgende Code funktionierte stattdessen.
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();
}