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

EF Core 7使用FromSql调用存储过程传递命名参数报错求助

EF Core 7中使用FromSql调用存储过程的正确参数化方式

你遇到的问题是因为FromSql方法没有接受字符串+单个参数的重载,EF Core 7中调用存储过程并传递命名参数有两种正确实现方式:

方式一:利用字符串插值自动参数化

EF Core会自动将插值表达式中的变量转换为参数化查询,避免SQL注入,同时无需手动创建SqlParameter:

using (accountingContext db = new())
{
    int transactionClassId = 3;
    var list = db.MonthlyTotals
                .FromSql($"EXECUTE dbo.Reporting_Monthly_Totals @TransactionClassId = {transactionClassId}")
                .ToList();
}

方式二:手动创建参数并使用FromSqlRaw

如果需要显式控制参数(比如设置参数类型、大小等),可以使用FromSqlRaw方法,配合手动创建的SqlParameter:

using (accountingContext db = new())
{
    var transactionClassIdParam = new SqlParameter("@TransactionClassId", 3);
    // 若需要指定参数类型,可使用重载:new SqlParameter("@TransactionClassId", SqlDbType.Int) { Value = 3 }
    var list = db.MonthlyTotals
                .FromSqlRaw("EXECUTE dbo.Reporting_Monthly_Totals @TransactionClassId", transactionClassIdParam)
                .ToList();
}

关键说明

  • FromSql专门用于支持字符串插值的参数化场景,编译器会自动处理插值变量为参数,不需要额外传递参数数组;
  • FromSqlRaw用于原始SQL字符串,需要手动传递参数数组,适合需要精细控制参数的场景;
  • 使用命名参数(@参数名 = 值)可以避免因参数顺序错误导致的问题,建议优先采用这种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:20:24