c# - 如何从实体框架核心调用存储过程中检索值调用第一个或默认方法
问题描述
我正在从 .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.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;
}
推荐阅读
- javascript - 解构 JavaScript 对象
- html - HTML 页面无法加载 CSS 文件,找不到资源错误
- php - 从php表单上传图片
- javascript - 如何禁用或自定义在不同的移动浏览器上
- python-3.x - Discord.py 删除除 pin 消息之外的所有消息
- java - 摄氏度和华氏度的用户输入验证
- c# - 使用 LINQ 查询选择对象列表
- forms-authentication - 从用户那里获取身份验证 cookie 的方法
- python - 在 Python 中将 CSV 转换为 CLF
- php - 使用 POST 方法打开新窗口导致 404 错误(找不到文件)