You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EF Core7.0+Pomelo7.0执行MySQL原生SQL报't.Value'列不存在错误

解决方案:EF Core 7.0 + Pomelo 7.0 执行原生SQL报Unknown column 't.Value'错误

问题原因

EF Core 7.0对Database.SqlQuery<T>处理值类型(如int)的逻辑做了调整,默认期望查询结果的列名为Value,但你的SQL返回的列别名是CNT,再加上Pomelo MySQL驱动的适配细节,导致生成的查询语句包含t.Value,最终数据库找不到该列报错。

可行解决方案

方案1:修改SQL列别名为Value

直接将查询结果的别名改为EF Core 7.0期望的Value,MySQL中用反引号包裹标识符避免关键字冲突:

var cnt = context.Database.SqlQuery<int>($"SELECT COUNT(*) AS `Value` FROM TABLE").FirstOrDefault();

方案2:用自定义实体/记录类配合FromSqlRaw

定义简单的类或记录接收查询结果,通过Set<T>().FromSqlRaw执行查询:

// 定义接收结果的类(或用C# 9+记录类型简化)
public class CountResult
{
    public int CNT { get; set; }
}

// 执行查询
var cnt = context.Set<CountResult>().FromSqlRaw($"SELECT COUNT(*) AS CNT FROM TABLE").FirstOrDefault()?.CNT ?? 0;

方案3:使用ExecuteScalar直接获取标量值

如果仅需单个标量结果,推荐用ExecuteScalar绕开实体映射逻辑,更高效:

var cnt = context.Database.ExecuteScalar<int>($"SELECT COUNT(*) FROM TABLE");

内容的提问来源于stack exchange,提问作者viscroad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:27:07