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

.NET Core Web API如何解决int无GetAwaiter定义报错

报错根因

报错核心是方法用错了:ExecuteSqlInterpolated是EF Core提供的同步执行SQL的方法,返回值就是int类型(代表语句执行影响的行数),本身不是可等待的Task类型。你直接对int类型的返回值加await关键字,编译器找不到int类型对应的GetAwaiter实现,就会抛出这个错误。
网上说的加ToListAsync()是针对返回结果集的查询类存储过程的方案,你的存储过程只返回执行状态值,确实不适用。

修复方法

根据你需要的异步/同步编码模式选对应写法即可:

  • 保留async/await异步写法:替换为对应的异步方法ExecuteSqlInterpolatedAsync,该方法返回Task<int>,可直接被await:
public async Task<int> CreateData(int id, string name)
{
    return await _dbContext.Database.ExecuteSqlInterpolatedAsync($"execute spname {id}, {name}");                      
}

补充说明:上面写法拿到的int值是存储过程执行影响的行数,如果你要获取存储过程内部通过RETURN语句返回的1/0状态值,需要定义输出参数接收,参考代码:

public async Task<int> CreateData(int id, string name)
{
    var returnParameter = new SqlParameter
    {
        ParameterName = "@spResult",
        SqlDbType = System.Data.SqlDbType.Int,
        Direction = System.Data.ParameterDirection.Output
    };
    await _dbContext.Database.ExecuteSqlInterpolatedAsync($"exec @spResult = spname {id}, {name}");
    return (int)returnParameter.Value;
}
  • 用同步写法:直接去掉方法的async、await关键字,保留原有同步方法调用即可:
public int CreateData(int id, string name)
{
    return _dbContext.Database.ExecuteSqlInterpolated($"execute spname {id}, {name}");                      
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:18:31