gpt4 book ai didi

c# - 使用 Dapper 调用带有地理参数的 PostgreSQL 函数时出现 NotSupportedException

转载 作者:行者123 更新时间:2023-11-29 14:31:26 26 4
gpt4 key购买 nike

我正在使用 Dapper(使用带有 NetTopologySuite 插件的 npgsql 数据提供程序)调用带有 geography 参数的 PostgreSQL 函数,然后收到一个 NotSupportedException:

System.NotSupportedException: The member _location of type NetTopologySuite.Geometries.Point cannot be used as a parameter value
at Dapper.SqlMapper.LookupDbType(Type type, String name, Boolean demand, ITypeHandler& handler) in C:\projects\dapper\Dapper\SqlMapper.cs:line 417
at Dapper.SqlMapper.CreateParamInfoGenerator(Identity identity, Boolean checkForDuplicates, Boolean removeUnused, IList`1 literals) in C:\projects\dapper\Dapper\SqlMapper.cs:line 2516
at Dapper.SqlMapper.GetCacheInfo(Identity identity, Object exampleParameters, Boolean addToCache) in C:\projects\dapper\Dapper\SqlMapper.cs:line 1707
at Dapper.SqlMapper.ExecuteScalarImplAsync[T](IDbConnection cnn, CommandDefinition command) in C:\projects\dapper\Dapper\SqlMapper.Async.cs:line 1207
...

但是当我使用 NpgsqlCommand 并通过 AddWithValue 方法指定类型时它工作正常。

如何让 Dapper 将 NetTopologySuite.Geometries.Point 映射到 geography

最佳答案

搜索后我找到了一个 unaccepted answer这解决了我的问题。

确保我添加了 Npgsql.NetTopologySuite包及其映射器已启用 connection.TypeMapper.UseNetTopologySuite(); 然后 ADO.Net 命令工作正常。

我添加了一个自定义 Dapper.SqlMapper.TypeHandler:

public class GeographyTypeMapper : SqlMapper.TypeHandler<Geometry> {
public override void SetValue(IDbDataParameter parameter, Geometry value) {
if (parameter is NpgsqlParameter npgsqlParameter) {
npgsqlParameter.NpgsqlDbType = NpgsqlDbType.Geography;
npgsqlParameter.NpgsqlValue = value;
} else {
throw new ArgumentException();
}
}

public override Geometry Parse(object value) {
if (value is Geometry geometry) {
return geometry;
}

throw new ArgumentException();
}
}

然后使用它 SqlMapper.AddTypeHandler(new GeographyTypeMapper()); 一切正常。

关于c# - 使用 Dapper 调用带有地理参数的 PostgreSQL 函数时出现 NotSupportedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51225814/

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