我在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);
}
答案 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;