首页 > 解决方案 > 如何从实体框架核心调用存储过程中检索值调用第一个或默认方法

问题描述

我正在从 .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().

提前致谢。

标签: c#asp.net-core.net-coresql-server-2012entity-framework-core

解决方案


如果您需要从数据库中获取一些结果,则不能使用 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;
    }


推荐阅读