如何使用参数调用 firstordefault 方法从实体框架核心调用存储过程中检索值

问题描述

我正在从 .Net WebApi 转换为 .Net Core API。

我希望来自过程调用实体框架核心的第一个调用 FirstOrDefault()

下面是我的过程代码

CREATE procedure sp_employee
@DelReqId int  
AS  
Begin  
    Select isnull(ApproverCode,'') ApproverCode from employee where Del_ReqId=@DelReqId  
End

C# 代码

public string GetApproverId(int ReqId)
    {
        string result = "";
        
            //int result = ctx.CDS_CheckForSaveAfterValidationFalse(Appid,RoleId);
            var ReqIdParam = new sqlParameter("@DelReqId",ReqId);
        


        result = db.Database.ExecutesqlRaw("exec LMS.CDS_GetApproverSAPIDOnReqId @DelReqId",ReqIdParam).ToString();


        return result;
    }

我需要用 ToStiring() 替换 FirstOrDefault()

提前致谢。

解决方法

如果需要从 DB 获取一些结果,则不能使用 db.Database.ExecuteSqlRaw。

您必须为 sp 结果创建一个特殊的类


public class ApproverSpResult
{
 public string ApproverCode {get; set;}
}

然后将这个类添加到dbcontext

  public virtual DbSet<ApproverSpResult> ApproverSpResults { get; set; }

   //and OnModelCreating

   modelBuilder.Entity<ApproverSpResult>(e =>
            {
                e.HasNoKey();
            });

只有在此之后,您才能从 SP 获得结果


public string GetApproverCode(int ReqId)
    {
      var ReqIdParam = new SqlParameter("@DelReqId",ReqId);

      var approverSpResult= db.ApproverSpResults.ExecuteSqlRaw("exec 
                 LMS.CDS_GetApproverSAPIDOnReqId @DelReqId",ReqIdParam)
              .ToList()
             .FirstOrDefault();
   
 if(approverSpResult!=null) return approverSpResult.ApproverCode;
 
   return null;
    }