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

本文关键字:设置 存储过程 调用 odata | 更新日期: 2023-09-27 18:34:36

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

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

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

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

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

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