You need to enable JavaScript to run this app. 如何在控制器中调用存储过程?DatabaseContext需补充哪些配置
优惠活动
大模型
产品
解决方案
定价
更多

如何在控制器中调用存储过程?DatabaseContext需补充哪些配置

需要补充的类与配置

当前你的代码缺失和存储过程返回结果匹配的实体定义,这是无法正常映射查询结果的核心问题,需要补充的内容包括:

  • 新建与存储过程返回列完全匹配的Employee实体类,类的属性名称、类型要和getEmployeeById存储过程返回的字段一一对应,比如员工ID属性要匹配数据库中id字段的nvarchar(7)类型,对应C#中的string类型。
  • 在现有DatabaseContext类中为Employee实体注册对应的DbSet,补充代码:
    public DbSet<Employee> Employees { get; set; }
    
  • 你现有的存储过程定义逻辑没有问题,不需要额外修改。
控制器中调用存储过程的实操方法

补充完上述配置后,直接在控制器的Action方法中通过DatabaseContext调用即可,必须使用参数化传递方式,禁止直接拼接用户输入到SQL语句中,避免SQL注入风险:

  • 若使用EF Core版本,调用代码示例:
    public IActionResult GetEmployee(string employeeId)
    {
        using (var dbContext = new DatabaseContext())
        {
            // 定义与存储过程入参匹配的SQL参数
            var idParameter = new SqlParameter("@employeeId", employeeId);
            // 执行存储过程,获取匹配的员工数据
            var employee = dbContext.Employees
                .FromSqlRaw("EXEC getEmployeeById @employeeId", idParameter)
                .FirstOrDefault();
            return View(employee);
        }
    }
    
  • 若使用EF6版本,将上述代码中的FromSqlRaw替换为SqlQuery方法即可,整体调用逻辑完全一致。
额外说明
  • 你现有代码中的DbSet<Parameter> parameter属性和当前存储过程调用无关,如果不属于其他业务逻辑的必需内容,后续可根据实际业务场景清理。
  • 如果不想为存储过程返回值新建强类型实体,也可以通过ADO.NET原生方式执行查询映射结果,但开发效率和可维护性会低于EF的强类型映射方式,通常不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 04:45:04