Dapper.Net:IEnumerable パラメータスロー例外:オブジェクト型System.Int64 []から既知のマネージプロバイダのネイティブ型へのマッピングが存在しません

c# dapper in-subquery where-in

質問

私はWHERE IN句を持つSQLクエリを実行するList<long>パラメータを渡す次のコードでSQL Server 2008 R2に対してDapper.Netを使用していますが、例外が発生します。

オブジェクト型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();
}

私はgithubのドキュメンテーションでDapperがリストをサポートしているのを見ましたが、 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
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow