c# - 如何在odata中调用存储过程时设置计数

标签 c# entity-framework asp.net-web-api odata

我正在使用 OData 来获取记录,但由于我们在使用它通过 LINQ 生成的 SQL 时遇到一些性能问题,我们决定编写一个存储过程来获取数据(使用 SQL Server 作为我们的数据库)。我知道如何调用存储过程并将结果映射到实体。我感到困惑的是,当我获得 $inlinecount=allpages 参数时,如何手动设置 odata.count 参数而不是让 OData 尝试执行此操作?

我想调用我的存储过程,它接受所有过滤器和排序,以及用于分页的skip和top作为参数,以获取数据。问题是,我需要应在响应中返回的 odata.count 属性的总计数(不应用skip/top/sorts)。为了获得这个计数,我必须创建第二个存储过程,只接受过滤器并返回计数,或者可能修改原始存储过程以返回计数作为输出参数以及数据。无论如何,一旦我得到这个号码,我该怎么办?如何告诉 OData 将其用作返回的 odata.count 属性,而不是尝试应用其自己的魔力来执行此操作?

最佳答案

如果在 Entity Framework 生成查询时分析数据库,它将执行两个查询。一个用于总数,另一个用于数据。就像你说的,这是一个类似的查询,只是获取计数而不是实际数据。

至于如何返回它,我过去曾使用 PageResult<T> 这样做过。 - 这有一个包含计数的结构。

您还应该考虑如何处理其他 odata 查询选项,例如 select。或者,您可以禁用您不支持的选项。

关于c# - 如何在odata中调用存储过程时设置计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412656/

相关文章:

c# - C# 枚举条目的名称中可以包含连字符吗

entity-framework - Entity Framework EntityType 'UserAccount' 没有定义键

c# - 带有 ActionNames 的 MVC4 WebApi 路由不允许通用 "Get"

c# - 将逗号分隔的列表绑定(bind)到 asp.net web api 中的 List<int>

.net - 验证 ASP.NET Web API 模型绑定(bind)器中的参数

c# - 未调用 OnCollisionExit

c# - 异步等待调用不返回

c# - 将 Monotouch 与 Google .NET API 结合使用

entity-framework - Entity Framework 合并梦Night

.net - Entity Framework 何时填充导航属性?