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

如何解决ASP.NET Core 6.0 Web API执行存储过程的报错问题

ASP.NET Core 6.0 Web API执行存储过程报错求助

我在ASP.NET Core 6.0 Web API中编写代码执行存储过程Add_New_Employee时出现报错,多次在线搜索未找到解决方案,恳请帮忙排查解决。以下是相关代码、报错信息和已安装依赖信息:

Controller代码

using Employee_API.Data;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Employee_API.Models;
using MySqlConnector;

namespace Employee_API.Controllers
{
  [ApiController]
  [Route("api/[controller]")]
  public class EmpController : Controller
  {
    private readonly EmpDbContext _empDbContext;

    public EmpController(EmpDbContext empDbContext)
    {
        _empDbContext = empDbContext;
    }
            
    [HttpPost("AddEmp")]    
    public async Task<IActionResult> AddEmp(Employee empRequest)
    {
        var name = new MySqlParameter("@Name", empRequest.Name);
        var empid = new MySqlParameter("@EmpId", empRequest.EmpId);
        var design = new MySqlParameter("@Designation", empRequest.Designation);
        var dob = new MySqlParameter("@DOB", empRequest.DOB);
        var mobile = new MySqlParameter("@Mobile", empRequest.Mobile);
        var mail = new MySqlParameter("@Mail", empRequest.Mail);

        await _empDbContext.emp_data.ExecuteSqlRaw("EXEC Add_New_Employee @Name, @EmpId, @Designation, @DOB, @Mobile, @Mail", name, empid, design, dob, mobile, mail).ToListAsync();

       return Ok(empRequest);
    }
  }
}

DbContext代码

using Employee_API.Models;
using Microsoft.EntityFrameworkCore;

namespace Employee_API.Data
{
  public class EmpDbContext : DbContext
  {
    public EmpDbContext(DbContextOptions options) : base(options)
    {
    }

    public DbSet<Employee> emp_data { get; set; } 
   }  
 }

报错信息

代码报错提示:'RelationalQueryableExtensions.ExecuteSqlRaw<TEntity>(IQueryable<TEntity>, string, params object[])' 已过时:'请改用 ExecuteSqlRawAsync。'

已安装NuGet包

包含Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Design、MySqlConnector、Pomelo.EntityFrameworkCore.MySql等相关依赖。


解决方案建议

  1. 替换过时方法并修正存储过程调用语法
    MySQL中调用存储过程需用CALL而非EXEC,同时使用异步且未过时的ExecuteSqlRawAsync方法,该方法返回受影响行数,无需调用ToListAsync()。修改后的核心代码如下:

    await _empDbContext.Database.ExecuteSqlRawAsync("CALL Add_New_Employee(@Name, @EmpId, @Designation, @DOB, @Mobile, @Mail)", name, empid, design, dob, mobile, mail);
    
  2. 优化DbContext构造函数
    使用泛型DbContextOptions<EmpDbContext>替代非泛型参数,提升类型安全性:

    public EmpDbContext(DbContextOptions<EmpDbContext> options) : base(options)
    {
    }
    
  3. 校验存储过程参数匹配
    确认数据库中Add_New_Employee存储过程的参数名称、顺序、数据类型与代码中传入的参数完全一致,避免因参数不匹配导致执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:15:48