问题描述
我正在从 .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;
}