3

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

オブジェクト型 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がリストをサポートしていることをgithubのドキュメントで見ましたが、サポートされているのだろうかと思ってList<long>いました。

https://code.google.com/p/dapper-dot-net/の古いドキュメントによると、int[]のみがサポートされているようです。

4

1 に答える 1

3

パラメータオブジェクトのタイプが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();
}
于 2013-04-27T23:31:04.343 に答える