c# - 从 Entity Framework Core 获取一个调用存储过程
问题描述
我正在尝试使用 Entity Framework Core 调用存储过程。存储过程有点复杂,所以我没有使用 LINQ。
这是我的代码:
using (IdentityProofContext dc = new IdentityProofContext())
{
SqlParameter[] @params =
{
new SqlParameter("@result", SqlDbType.Int) {Direction = ParameterDirection.Output}
};
dc.IdentityPersonalData.FromSqlRaw("Execute usp_GetIdentityProofStatus", @params).FirstOrDefaultAsync();
//var result = @params[0].Value;
//if (result > 0)
//{
// MiscEmails.sendEmails();
//}
}
这是我的存储过程:
ALTER PROCEDURE usp_GetStatus
(@result int OUTPUT)
AS
SELECT @result = COUNT(*)
FROM dbo.TestData
WHERE DATEDIFF(MINUTE, DateInserted, GETDATE()) < 120 --Number of minutes
AND STATUS IN ('test1' )
RETURN @result
任何有关使用 Entity Framework Core 调用存储过程以返回单个值的帮助将不胜感激。
我还尝试查看此链接:
Entity Framework Core - 使用带有输出参数的存储过程
我没有看到任何内容:ExecuteSqlCommand
。这是一个屏幕截图:
这些是我正在使用的框架:
我正在使用 .NET Core 控制台应用程序,这些是我.cs
文件中的 using 语句:
using System;
using System.Data;
using EVitalsStatusCheck.DAL.DB;
using Microsoft.EntityFrameworkCore;
using EVitalsStatusCheck.DAL;
using System.Data.SqlClient;
解决方案
从文档。
对于使用纯字符串执行 SQL 查询,请改用 ExecuteSqlRaw。对于使用插值字符串语法创建参数的 SQL 查询的执行,请改用 ExecuteSqlInterpolated。
因为您的 EFCore 版本是 5.0,所以方法ExecuteSqlCommand
已过时,您可以使用ExecuteSqlRaw
和ExecuteSqlInterpolated
替换它。
推荐阅读
- java - 带有 JAX-RS(例如带有 RestEasy)的 Unix Socket(例如用于 Docker)
- spring - 带有 aws cognito 的 Spring 项目
- flutter - 如何修复 Flutter 中 ListTile 中的 renderflex 错误?
- javascript - 如何在电子邮件中发送带有背景颜色的元素由变量组成
- mysql - 在 aws ec2 ubuntu 上设置 mysql 节点
- python - Python tkinter 在运行时重新启动主窗口
- python - 在 Django 中发布后使用 ListView 的查询集返回 httpresponse
- javascript - 通过网络在 Javascript 中发送十六进制值
- log4r - rails6 log4r tagged_logging.rb:22:in `call': 参数数量错误
- ruby-on-rails - 'SQLite3::BusyException: database is locked' 通过carrierwave上传时出现异常