Dapper.Net : IEnumerable 매개 변수가 예외를 throw합니다. System.Int64 [] 개체 유형에서 알려진 관리되는 공급자 네이티브 형식으로의 매핑이 없습니다.

c# dapper in-subquery where-in

문제

SQL Server 2008 R2에 대해 Dapper.Net을 사용하여 다음 코드에서 WHERE 절이있는 SQL 쿼리를 실행하기 위해 List<long> 매개 변수를 전달하지만 예외가 발생합니다.

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

나는 Dapper가 List 지원을 가지고 있다는 github 문서 를 보았지만 List<long> 가 지원되는지 궁금합니다.

https://code.google.com/p/dapper-dot-net/ 의 이전 문서에 따르면 int [] 가 지원되는 것처럼 보입니다.

수락 된 답변

예외가 발생했을 때 매개 변수 객체가 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();
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.