首先,我遇到了所讨论的同样的问题,据称大约在两年前修复了.有关该问题,请参阅以下问题:
Dapper AddDynamicParams for IN statement with “dynamic” parameter name
我遇到的问题是,当我对Postgres 9.3数据库执行类似的查询(SELECT * FROM MyTable WHERE MyId IN @myIds)时,我收到以下异常:
Npgsql.NpgsqlException : ERROR: 42883: operator does not exist: integer = integer[]
List<MyTable> result; var query = "SELECT * FROM MyTable WHERE MyId IN @myIds"; var queryParams = new Dictionary<string,object> { { "myIds",new [] { 5,6 } } }; var dynamicParams = new DynamicParameters(queryParams); using (var connection = new NpgsqlConnection(connectionString)) { result = connection.Query<MyTable>(query,dynamicParams).ToList(); } return result;
如果相反,我在Dapper的(v1.29)sqlMapper.PackListParameters函数中放置一个断点if(FeatureSupport.Get(command.Connection).Arrays)并手动将执行移动到else部分,然后查询运行并返回预期成绩.
我注意到.Arrays属性显式地将Postgres称为受支持的数据库,所以我想知道:这是我的代码,Dapper代码,Dapper配置还是Postgres配置的问题?是否可以在不修改Dapper代码库的情况下使用变通方法?谢谢.