为什么实体框架调用我的存储过程,但返回一个不正确的值

本文关键字:一个 不正确 返回 调用 框架 实体 我的 存储过程 为什么 | 更新日期: 2023-09-27 17:50:40

我有一个存储过程,它简单地返回记录总数除以传入的任何值。这有助于在网站上进行分页。

但是,我使用实体框架绑定到该存储过程,并且它为所有对它的调用返回-1。当我使用SQL Management Studio查询存储过程时,它返回正确的值。

我的存储过程是这样的:

CREATE PROCEDURE [dbo].[GetAuditRecordPageCount]
@Count INTEGER
AS
RETURN ((SELECT COUNT(Id) FROM AuditRecords) / @Count) + 1
我在c#中对实体框架的调用是这样的:
int pageCount;
using (Entities entities = new Entities())
{
    pageCount = entities.GetAuditRecordPageCount(count);
}

我这样写c#代码正确吗?

根据注释中的请求,EF生成的SQL是:

exec [dbo].[GetAuditRecordPageCount] @Count=100

为什么实体框架调用我的存储过程,但返回一个不正确的值

你试过了吗?http://www.devtoolshed.com/using-stored-procedures-entity-framework-scalar-return-values

我认为你的程序应该是这样的:

CREATE PROCEDURE [dbo].[GetAuditRecordPageCount]
@Count INTEGER
AS
declare @retVal int
set @retVal = ((SELECT COUNT(Id) FROM AuditRecords) / @Count) + 1
select @retVal

在c#代码中:

int? pageCount;
using (Entities entities = new Entities())
{
   pageCount = entities.GetAuditRecordPageCount(count).SingleOrDefault();
   if (pageCount.HasValue)
   {
      //do something here
   }
   else
   {
   }
}

别忘了把"Scalars: Int32"放在编辑功能导入屏幕