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

EF Core 5.0使用FromSqlRaw访问MySQL抛出SQL语法异常问题

问题结论

该异常不是Guid与binary(16)类型不匹配导致的,问题出在你编写的原生SQL语句本身存在语法错误。

错误原因

查看你提供的执行代码,SQL语句存在两处明显语法问题:

  • 表名与查询条件之间缺少WHERE关键字
  • SQL语句末尾多写了一个多余的右括号)
// 错误写法
this.DbContext.Set<TEntity>().FromSqlRaw(@"select * from <TableName> Id = {0};)", Id).ToList()
// 问题位置:表名后缺WHERE,末尾多了)

MySQL解析器执行SQL时,读到表名后没有识别到合法的后续语法,直接遇到Id = ...片段,所以抛出1064语法错误,错误提示的语法位置和你的代码问题完全匹配。

补充说明:Pomelo连接器默认就会将C#的Guid类型映射为MySQL的binary(16)类型,参数化传入Guid时自动生成带_binary前缀的二进制参数,这个转换逻辑本身是合规的,不存在类型不匹配问题。

修复方案

修正SQL的语法错误即可:

// 正确写法,加上WHERE,去掉多余右括号
this.DbContext.Set<TEntity>().FromSqlRaw(@"select * from <TableName> WHERE Id = {0};", Id).ToList()

若修改后仍有异常,可额外排查两个点:

  • 确认表名、Id字段名拼写正确,如果是MySQL保留关键字需要用反引号包裹
  • 确认传入的Id参数为Guid类型,不存在类型传错的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:15:02