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