3

当底层数据不是来自实体框架时,我无法让 OData 与 Asp.Net Web Api 一起使用。

我正在使用最新的 OData Nuget 包 ( Microsoft ASP.NET Web API OData 0.2.0-alpha release),但是当我尝试传递 OData 查询(例如$top=10)时,我收到错误消息:

字典中不存在给定的键

如果我不发送 OData 查询,我可以很好地调用该方法。同一 Web Api 项目中使用实体框架的其他方法可以很好地处理 OData 查询。一个不起作用的是使用 Subsonic ORM 查询底层 AS400 数据源。它返回一个 IQueryable。在 VS 2012 和 .NET 4.5 RTM 发布并将 OData 移入单独的包之前,这工作得很好。(即使用 VS2012 和 .NET 4.5 的 beta 和 RC 版本)

任何想法,将不胜感激。

4

1 回答 1

1

我猜这个问题是由稳定的排序引起的,它不适用于底层查询提供程序。你能把错误的调用堆栈放上去确认吗?

此版本中 OData 查询组合的一个重大变化是它确保在获取顶级项目之前稳定排序。这样做的原因是用户可能有随机数据源,这使得返回数据不断变化。

OrderyBy [Keys]web api odata 包的做法是在执行top之前添加查询。或者如果模型中没有定义键(键是 ID、EntityID 或 [Key] 属性属性),它将使用模型中的所有原始属性进行排序。

如果你能确保数据源总是返回有序稳定的数据,你可以通过代码关闭这个特性:

[Queryable(EnsureStableOrdering = false)]
于 2012-11-19T20:07:22.767 回答