无法使用 C# / .Net 和 Npgsql 从 Postgres 存储函数读取数据

问题描述 投票:0回答:2

我有一个 Postgres 函数,可以在 Dbeaver 中按预期工作

CREATE OR REPLACE FUNCTION public.getallusersv2()
 RETURNS SETOF users
 LANGUAGE plpgsql
AS $function$

begin
    RETURN QUERY
      SELECT DISTINCT * FROM users ORDER BY id;
    return;
END;
$function$;

但是,当尝试使用 Npgsql 调用该函数时,我没有得到预期的结果。

这是我用来执行和读取数据的代码

var cmd = new NpgsqlCommand("SELECT getallusersv2()", conn);
var reader = cmd.ExecuteReader();

我写了一个方法,应该映射我返回的结果,但我什至无法做到这一点,因为我似乎没有任何数据可以解析。

调试时我注意到以下错误:

The field 'getallusersv2' has a type currently unknown to Npgsql (OID 16421). You can retrieve it as a string by marking it as unknown, please see the FAQ.

调试窗口

但真正突出的是,似乎没有返回任何数据。相反,它似乎只是一个以被调用的函数命名的空对象。

c# .net postgresql entity-framework npgsql
2个回答
1
投票

好吧,在过去几个小时里我不断地敲头之后,我终于明白了。 显然,你必须将

SELECT
写成如下
SELECT * FROM getallusersv2()

我会留下这个问题,以防其他人遇到同样的问题。


0
投票

你真的节省了我的时间,三天以来我一直在努力从 cokcroach db 函数检索记录到 uisng .net core 和 Npgsql Ef core 的列表。使用 SELECT * FROM getallusersv2() 语法帮助我获取数据,而不是使用 Select getallusersv2();

© www.soinside.com 2019 - 2024. All rights reserved.