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

通过EF Core SqlQuery传递GUID触发PostgreSQL UUID格式错误求助

问题

我编写了调用PostgreSQL函数的代码,在pgAdmin中调用该函数可正常运行。我的C#代码如下:

_db.Database.SqlQuery<CreateOrderInfo>($"select * from Asset_CreateOrderInfo('{request.Data!.UserId}',{request.Data!.SymbolId})")

生成的命令如下:

select * from Asset_CreateOrderInfo('00000001-0000-0000-0000-000000000000',2)

该命令在pgAdmin中运行正常,但通过EF Core执行时触发错误:

Npgsql.PostgresException (0x80004005): 22P02: invalid input syntax for type uuid: "@p0"

问题原因分析
  • 参数化逻辑冲突:直接用字符串拼接生成SQL时,EF Core会自动尝试对语句进行参数化处理,但你手动为UUID值添加了单引号,导致EF Core误将带引号的内容识别为参数占位符的一部分,最终把@p0作为UUID值传入PostgreSQL,引发类型解析错误。
  • 类型映射失效:PostgreSQL的UUID类型需要通过EF Core的类型映射机制正确传递参数,字符串拼接破坏了这一机制,无法将C#中的UUID类型正确转换为PostgreSQL的UUID类型,反而被当作普通字符串参数处理,导致语法不匹配。
  • SQL写法不符合EF Core规范:这种直接拼接SQL的方式违背了EF Core推荐的参数化查询原则,不仅会引发类型问题,还存在SQL注入的安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:19