【发布时间】:2014-08-14 22:40:24
【问题描述】:
首先,我遇到了与讨论过的相同的问题,据称大约两年前已解决。有关该问题,请参阅以下问题:
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 代码库的解决方法?谢谢。
【问题讨论】:
标签: c# dapper postgresql-9.3