【问题标题】:Problem calling npgsql stored function of a postgresql 10.10 database with postgis from EF Core 3.0使用 EF Core 3.0 的 postgis 调用 postgresql 10.10 数据库的 npgsql 存储函数时出现问题
【发布时间】:2019-12-01 22:10:07
【问题描述】:

我有一个带有文本格式输入 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");

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

【问题讨论】:

  • 您的帖子中似乎缺少该错误。
  • 对不起,我不得不多次编辑。我的代码格式有问题。
  • 我发现问题出在几何及其运算的使用上。如果我在 miguel.SearchSum 中退出几何变量 (geom) 和 wkt 转换。调用工作正常。但我需要与几何图形相交。所以我跟着需要一个解决方案。谢谢。
  • 我已经找到了问题所在。 EF Core 中使用的连接登录对 postgis 架构没有权限。 该错误非常令人困惑,授予在该架构中登录就足够了。所以它已经可以正常工作了。

标签: postgresql entity-framework npgsql


【解决方案1】:

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

但是,EF Core 在这里除了简单地使用 ADO.NET 或使用 Dapper 之外没有多大价值。

【讨论】:

  • JSResultSearch 是一个只有字符串类型属性的类,称为 jsresult。那里收到函数 postgresql 的文本返回。实际上错误是从 postgresql 函数返回的。
猜你喜欢
  • 2020-03-04
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2012-09-07
  • 2010-11-25
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多