odata中调用存储过程时如何设置计数
How to set the count when calling a stored procedure in odata
我正在使用 OData 获取记录,但由于我们在使用通过 LINQ 生成的 SQL 时遇到一些性能问题,我们决定编写一个存储过程来获取数据(使用 SQL 服务器作为我们的数据库)。我知道如何调用存储过程并将结果映射到实体。我感到困惑的是,当我获得 $inlinecount=allpages
参数时,如何手动设置 odata.count
参数而不是让 OData 尝试这样做?
我想调用我的存储过程来获取数据,它接受所有的过滤器和排序,以及用于分页的 skip 和 top 作为参数。问题是,我需要 odata.count
属性 的总计数(不应用 skip/top/sorts),应该在响应中 returned。为了获得这个计数,我将不得不制作第二个只接受过滤器和 returns 计数的存储过程,或者可能将原始存储过程修改为 return 计数作为输出参数,以及与数据。无论如何,一旦我得到那个号码,我该怎么办呢?我如何告诉 OData 将其用作 returned odata.count
属性,而不是尝试应用它自己的魔法来这样做?
如果在 entity framework 生成查询时分析数据库,它会执行两个查询。一个用于总数,另一个用于数据。就像你说的,这是一个类似的查询,只是获取计数而不是实际数据。
至于如何 return 它,我过去曾使用 PageResult<T>
这样做过 - 它有一个包含计数的结构。
您还应该考虑如何处理其他 odata 查询选项,例如 select。或者,您可以禁用您不支持的选项。
我正在使用 OData 获取记录,但由于我们在使用通过 LINQ 生成的 SQL 时遇到一些性能问题,我们决定编写一个存储过程来获取数据(使用 SQL 服务器作为我们的数据库)。我知道如何调用存储过程并将结果映射到实体。我感到困惑的是,当我获得 $inlinecount=allpages
参数时,如何手动设置 odata.count
参数而不是让 OData 尝试这样做?
我想调用我的存储过程来获取数据,它接受所有的过滤器和排序,以及用于分页的 skip 和 top 作为参数。问题是,我需要 odata.count
属性 的总计数(不应用 skip/top/sorts),应该在响应中 returned。为了获得这个计数,我将不得不制作第二个只接受过滤器和 returns 计数的存储过程,或者可能将原始存储过程修改为 return 计数作为输出参数,以及与数据。无论如何,一旦我得到那个号码,我该怎么办呢?我如何告诉 OData 将其用作 returned odata.count
属性,而不是尝试应用它自己的魔法来这样做?
如果在 entity framework 生成查询时分析数据库,它会执行两个查询。一个用于总数,另一个用于数据。就像你说的,这是一个类似的查询,只是获取计数而不是实际数据。
至于如何 return 它,我过去曾使用 PageResult<T>
这样做过 - 它有一个包含计数的结构。
您还应该考虑如何处理其他 odata 查询选项,例如 select。或者,您可以禁用您不支持的选项。