实体框架数据库 - 首先使用输出参数和结果集来处理存储过程

时间:2016-09-02 05:45:43

标签: c# .net sql-server asp.net-mvc stored-procedures

我在ASP.NET项目中使用数据库优先方法实现Entity Framework。我有一个具有输出参数@TotalCount的存储过程,它使用SELECT语句返回结果集。

当我在MyDbContext.edmx文件中添加存储过程时,MyDbContext.cs有一个函数返回一个为存储过程自动生成的int(可能是输出参数)。

如何使用此方法访问输出参数和结果集?

下面给出了存储过程片段。基本上我试图在存储过程中进行分页。

CREATE PROCEDURE [dbo].[sp_GetDetailsForStudent]
    @StudentId BIGINT,
    //....
    @OrderBy NVARCHAR(max),
    @Page INT OUTPUT,
    @Items INT = 200,
    @TotalCount INT OUTPUT
    //.....

    SET @SortSql = N'SELECT * FROM #tmpTable'
    //......    
    EXEC sp_executesql @SortSql;

MyDbContext.cs档案

 public virtual int sp_GetDetailsForStudent(parameters ...){
     //......
     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_GetDetailsForStudent", input parameters..., totalCount);
 }

1 个答案:

答案 0 :(得分:0)

首先,您需要更新您的EDMX模型,以便您的功能

public virtual int sp_GetDetailsForStudent(parameters ...){....}

应该是

public virtual ObjectResult<YourResult_type> sp_GetDetailsForStudent(parameters ...){....}

要刷新EDMX模型,请转到hear

您可能需要选择&#34;创建新的复杂类型&#34; 选项,而不是上面链接中建议的&#34;更新&#34;

然后要获取结果,您可以使用下面的代码

ObjectParameter outParam1 = new ObjectParameter("outParameter", typeof(long));
var db = new YourDbContext();
var res = db.sp_GetDetailsForStudent(parameter1,parameter2,outParam1 );
foreach (YourResult_type item in res)
{
    var prop1= item.property1;
}
var outParam1Value= outParam1.Value;
相关问题