.net Core() 上的 Postgresql 存储过程

bal*_*ron 1 postgresql entity-framework entity-framework-core .net-core

我正在尝试使用 .net Core 2.2 将我们当前的 SQL Server 数据库移动到 PostgreSQL。

我将所有表(约束、索引)、视图和存储过程转换为 Postgre SQL。我在后端保留了数据模型的所有 Dbset 配置(连接字符串除外)。

我有一个关于在 EF Core 中运行存储过程(在 Postgres 中)的问题。存储过程返回一个视图。尝试使用FromSql()来自 Ef Core 的方法将此视图映射到 DbSet 。它之前与 SQL Server 一起运行

Postgre SQL 中的存储过程:

 CREATE OR REPLACE FUNCTION public.getbyusername_vw_sys_menu_lang()
 RETURNS SETOF "VW_SYS_MENU_LANG"
 LANGUAGE sql
AS $$

    --return query
    SELECT M.* FROM "VW_SYS_MENU_LANG" M
    where M."USERNAME" = 'Admin' -- parameters will be added
    limit 10;

$$;
Run Code Online (Sandbox Code Playgroud)

我在 .net Core 中遇到错误:

“FromSql”操作的结果中不存在所需的列“ID”。

 var sql = "SELECT GETBYUSERNAME_VW_SYS_MENU_LANG()";
//var sql = "SELECT * FROM VW_SYS_MENU_LANG" //it works with view
 var result1 = dbSet.FromSql(sql) //error : The required column 'ID' was not present in the results of a 'FromSql' operation.
Run Code Online (Sandbox Code Playgroud)

MyDbcontext : DbContext
....
....

 protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<VW_SYS_MENU_LANG>(e => { e.HasKey(t => new { t.ID, t.LANG }); });
Run Code Online (Sandbox Code Playgroud)

在 postgres 中,我可以毫无错误地运行存储过程,它会按预期返回结果,并且ID列确实存在大写字符。我已将所有表和列名称转换为大写字母。

我认为应该在 EF Core 或 Postgres 存储过程上的 DbContext 类上编辑一些内容。

------------更新 -------------

有点困惑,我使用 Dbeaver 来创建和测试 PostgreSQL 表、函数等。

当我在Dbeaver上运行SELECT GETBYUSERNAME_VW_SYS_MENU_LANG()函数时,它返回包含所有列和数据的表:

比弗

当我在Pgadmin上运行相同的功能时,结果是:

在此处输入图片说明

bal*_*ron 5

它应该是

SELECT * from GETBYUSERNAME_VW_SYS_MENU_LANG()
Run Code Online (Sandbox Code Playgroud)

代替

SELECT GETBYUSERNAME_VW_SYS_MENU_LANG()
Run Code Online (Sandbox Code Playgroud)

作为 PostgreSQL 开发新手,很难找到差异。
第二个返回包含所有数据的一列,逗号分隔。第一个返回表(或视图)的所有列