gpt4 book ai didi

c# - Dapper.Net : IEnumerable parameter throws exception: No mapping exists from object type System. Int64[] 到已知托管提供程序 native 类型

转载 作者:行者123 更新时间:2023-11-30 17:05:39 27 4
gpt4 key购买 nike

我在以下代码中针对 SQL Server 2008 R2 使用 Dapper.Net 来传递 List<long>参数来运行具有 WHERE IN 子句的 SQL 查询,但我得到异常:

不存在从对象类型 System.Int64[] 到已知托管提供程序 native 类型的映射。

对了,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 上看到了 documentation Dapper 支持 List,但我想知道 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();
}

关于c# - Dapper.Net : IEnumerable<long> parameter throws exception: No mapping exists from object type System. Int64[] 到已知托管提供程序 native 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com