如何在ASP.NET Core 9 MVC中用Npgsql和EF Core获取数据库单行值
解决方法
出现该错误的核心原因是:EF Core 通过值元组映射查询结果时,要求返回的列名与元组属性名完全匹配。而 PostgreSQL 默认会把未用双引号包裹的标识符转为小写,你的元组属性是大写的Klient、Krediit、Vaba,导致 EF Core 无法找到对应列,进而抛出异常。
你需要在 SQL 语句中为每个列指定与元组属性名完全一致的别名,并用双引号包裹别名以保留大小写:
var tulem = await ctx.Database .SqlQuery<(string Klient, int Krediit, int Vaba)>($"select 'test' as \"Klient\", 1 as \"Krediit\", 2 as \"Vaba\"") .SingleAsync();
如果你的项目配置了 PostgreSQL 使用不区分大小写的标识符(较为少见),也可以改为小写别名并调整元组属性名:
var tulem = await ctx.Database .SqlQuery<(string klient, int krediit, int vaba)>($"select 'test' as klient, 1 as krediit, 2 as vaba") .SingleAsync();
推荐第一种写法,既符合 C# 命名规范,也能确保列名映射的准确性。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

