WebAPI 2.2 - 实体框架6 - Odata v4查询问题和语义

时间:2015-01-30 02:15:42

标签: entity-framework odata asp.net-web-api2

我正在尝试原型移动应用程序。要求是Odata交付机制和现有SQL数据库。我使用visual studio构建了一个WebAPI 2.2 Web服务应用程序。我安装了Entity Framework 6和Odata V4。让它几乎完全正常运行非常简单。我确实有一个问题......

我有一个基本的两个SQL表后端。主表具有配置元素,辅助表具有来自多个系统的每日采集数据。辅助表有一个主键,它是configid和日期降序的复合。这允许表自然地排序最近的第一个(下面的基本模式)。

WebAPI服务运行良好且符合预期。 " / odata / configs",返回所有配置。 " /的OData / CONFIGS(1)"返回单个实体。 " /的OData / CONFIGS(1)/细节"返回最近的第一个所有适当的详细记录......太棒了。我遇到问题的一个区域是寻呼数据所需的odata uri查询。顶部,跳过等不返回正确的记录集...它们返回数据集的底部,好像sql主键顺序没有意义......这很奇怪?

我曾在某处读到过分页可能需要表上的主键ID。这准确吗?有人可以指出从哪里开始寻找文档或解决此问题的方法。此外,任何对自定义数据集的洞察,使用odata查询的存储过程处理等在不久的将来都会有所帮助。

主要表格:"配置" configid:int主键 名称:varchar(50) 更多... 次要表:"细节" configid:int(链接到主要) 日期:日期时间 data:varchar(max)

提前致谢,

Stew Basterash

2 个答案:

答案 0 :(得分:0)

在这里查看OData教程: http://www.odata.org/getting-started/basic-tutorial/

通过组合有序,顶部和跳过子句,您应该能够实现分页。

答案 1 :(得分:0)

感谢您的回复......我确实以这种方式找到了解决方案。我很好奇当SQL表被本地索引时,您会认为标准结果将是降序。表主键是链接索引和日期的组合,日期是降序。使用所有记录调用表的结果,即http://localhost/odata/configs(n)/details按预期返回所有记录...按降序排序...但是,调用top,skip for paging返回表的底部,尽管SQL主键......

这是一种好奇心!

Stew Basterash