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

FromSqlRaw()相关官方文档是否存在内容表述矛盾的问题?

报错原因说明

该报错是因为混淆了FromSqlRaw支持的两种参数传递语法:

  • {}包裹的语法仅支持数字序数占位符(比如{0}、{1}),用来按顺序匹配后续传入的参数列表,不可直接包裹命名参数名。写法{@MyParameter}会被EF Core尝试解析为数字索引,解析失败就会触发FormatException: Input string was not in a correct format报错。
  • 命名参数模式下,直接在SQL语句中写@参数名即可,不需要额外加{}包裹,这符合原生SQL的参数传递习惯,也就是第二个可正常执行的写法逻辑。

相关文档不存在内容错误,对应两种不同的参数用法场景:文档中展示的带{}的示例,均为序数参数的用法,比如FromSqlRaw("SELECT * FROM Blogs WHERE Id = {0}", id),其中{0}对应传入的第一个参数,和命名参数的使用场景完全不同。

两种合法的FromSqlRaw参数写法示例

1. 序数占位符写法(无需手动构造SqlParameter)

// {0}对应第一个传入的参数,EF Core会自动处理参数化逻辑避免注入风险
Context.Entity.FromSqlRaw("SELECT * FROM dbo.SomeFunction({0})", "some value")

2. 命名参数写法(手动构造SqlParameter)

// 命名参数直接写@前缀的参数名即可,无需加{}包裹
Context.Entity.FromSqlRaw("SELECT * FROM dbo.SomeFunction(@MyParameter)", new SqlParameter("@MyParameter", "some value"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:45:04