首页 > 解决方案 > 从 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;

标签: c#entity-frameworkasp.net-coreentity-framework-core

解决方案


文档

对于使用纯字符串执行 SQL 查询,请改用 ExecuteSqlRaw。对于使用插值字符串语法创建参数的 SQL 查询的执行,请改用 ExecuteSqlInterpolated。

因为您的 EFCore 版本是 5.0,所以方法ExecuteSqlCommand已过时,您可以使用ExecuteSqlRaw ExecuteSqlInterpolated 替换它。


推荐阅读