ASP.NET核心实体框架调用存储过程

大汗2016

我正在使用ASP.NET Core Entity Framework,并且想调用一个简单的存储过程。

我在迁移中创建了存储过程,如下所示:

public partial class spGetAvailableCourses : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        var sp = @"CREATE PROCEDURE [dbo].[GetAvailableCourses]
            AS
            BEGIN
                SELECT COUNT(courses.Enrolled) FROM Courses WHERE Courses.Capacity > Courses.Enrolled;
            END";

        migrationBuilder.Sql(sp);
    }

我可以使用以下命令在SQL Server中调用存储过程。

EXEC dbo.GetAvailableCourses

但是,当我尝试在我的中调用存储过程时ICourseRepository,它不起作用,我得到的是负数。

有人可以告诉我调用存储过程的正确方法吗?谢谢

public class CourseRepository : ICourseRepository
{
    private readonly DataContext _context;

    public CourseRepository(DataContext context)
    {
        _context = context;
    }
   
    public Task<CoursesAvailableCount> CoursesAvailableCount()
    { 
        var ss = _context.Database.ExecuteSqlRaw("GetAvailableCourses");
        return null;
    }

我也试过

    public async Task<CoursesAvailableCount> CoursesAvailableCount()
    {
        var s = await _context.Database.ExecuteSqlCommandAsync("GetAvailableCourses");
    }
阿里·雷扎

除了ExecuteSqlCommand方法外,DbContext.Database属性还提供了一个API,使您可以直接执行ADO.NET操作。GetDbConnection方法返回一个DbConnection对象,该对象表示上下文的基础连接。从那时起,您可以还原到熟悉的ADO.NET API:

using (var command = _context.Database.GetDbConnection ().CreateCommand ())
{
   command.CommandText = "SP_NAME";
   command.CommandType = CommandType.StoredProcedure;
   _context.Database.OpenConnection ();
   using (var result = command.ExecuteReader ())
   {
      if (result.HasRows)
      {
         result.Read ();
         var x = result.GetInt32 (0); // x = your sp count value
      }
   }
}

编辑(扩展示例):

public static class EfCoreExtentions
{
    public static int? Execute_SingleValue_SP_AsInt(this AppDbContext context,string SpName)
    {
        using (var command = context.Database.GetDbConnection().CreateCommand())
        {
            command.CommandText = SpName;
            command.CommandType = System.Data.CommandType.StoredProcedure;
            context.Database.OpenConnection();
            using (var result = command.ExecuteReader())
            {
                if (result.HasRows)
                {
                    result.Read();
               var x = result.GetInt32(0); // x = your sp count value
                    return x;
                }
            return null;
            }
        
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ASP.Net Core - 实体框架 - 调用没有返回数据的存储过程(在 void 方法中)

如何使用实体框架在 ASP.NET MVC 中调用存储过程

ASP.Net核心类库的实体框架核心迁移

如何使用代码优先的 ASP.NET MVC 和实体框架导入存储过程

.NET核心实体框架存储过程

JsonResult ASP.NET实体框架核心错误

Asp.Net 核心 MVC 微软实体框架

使用实体框架ASP.NET MVC登录过程

想要在 ASP.NET MVC 实体框架应用程序中使用存储过程创建自动完成搜索

通过使用存储过程或实体框架将数据从sql Server 2008检索到ASP.NET MVC 4

在ASP.NET MVC 5中使用实体框架中的存储过程从多个表中获取多个记录

带有实体框架的 ASP.Net Core Web API 使用存储过程有什么好处吗?

如何从.net核心实体框架使用表值参数调用存储过程

如何使用 .net 核心实体框架调用返回 list<int> 的存储过程

实体框架的.Net核心不增加存储过程类

事务集成测试ASP.Net核心和实体框架核心

在 ASP.NET Core 3.1/5.0 中调用存储过程

ASP.NET存储过程调用将VarBinary插入sql

ASP.NET如何调用此存储过程

如何从ASP.NET Web API执行(调用)存储过程?

ASP .NET实体框架核心无法访问已处置的对象

带有实体框架的ASP.NET核心多对多不起作用

将实体框架,ASP.NET MVC核心和PostgreSQL与Heroku一起使用

ASP.net核心实体框架CurrentValues.SetValues()最佳当前替代方案

没有asp.net应用程序的实体框架核心种子

ASP.NET Core 2.0 Web API实体框架核心-寻找更优雅的解决方案

ASP.NET 核心实体框架空值连接字符串

如何在asp.net核心实体框架核心中通过ajax发布数据后显示更新内容

环境之间的ASP.NET实体框架代码优先迁移过程