首页 > 解决方案 > 使用 EF Core 3.0 的 postgis 调用 postgresql 10.10 数据库的 npgsql 存储函数时出现问题

问题描述

我有一个带有文本格式输入 json 参数的函数,我将其转换为 json 本身。此函数以文本格式返回另一个 Json。当我使用另一个函数测试从 PGAdmin 4 调用此函数时,它工作正常,但如果我从 EF Core 3.0 调用该函数,我会收到此错误:

Error Name: invalid input syntax for type json  
Error State: 22P02  
Error Context: JSON data, line 1: {"ErrorMsg":"Error Name: type "geometry...  
PL/pgSQL function miguel.searchjson(text) line 87 at assignment  
SQL statement "SELECT * from miguel.searchJSON(param)"
PL/pgSQL function miguel.test_searchjson() line 19 at SQL statement

对于没有返回文本的 Json 的其他函数,我在执行中没有问题。我以这种方式调用我的函数:

var res = _context.JSResultSearch.FromSqlRaw("SELECT miguel.test_searchjson() as jsresult");

坦率地说,我已经对这个话题感到绝望。如有任何帮助,我将不胜感激。

标签: postgresqlentity-frameworknpgsql

解决方案


似乎您正在尝试调用一个返回简单文本的函数,并期望 EF Core 为您读出它(尽管这不清楚,因为您在 JSResultSearch 上调用 FromSqlRaw,我们不知道那是什么)。EF Core 不支持为您加载简单的非实体值 - 请参阅https://github.com/aspnet/EntityFrameworkCore/issues/11624

但是,EF Core 在这里没有太大价值,只是简单地下降到 ADO.NET 或使用 Dapper。


推荐阅读