如何解决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等相关依赖。
解决方案建议
替换过时方法并修正存储过程调用语法
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);优化DbContext构造函数
使用泛型DbContextOptions<EmpDbContext>替代非泛型参数,提升类型安全性:public EmpDbContext(DbContextOptions<EmpDbContext> options) : base(options) { }校验存储过程参数匹配
确认数据库中Add_New_Employee存储过程的参数名称、顺序、数据类型与代码中传入的参数完全一致,避免因参数不匹配导致执行失败。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

