【问题标题】:Web Api and Odata without Entity Framework没有实体框架的 Web Api 和 Odata
【发布时间】:2012-11-07 16:51:07
【问题描述】:

当底层数据不是来自实体框架时,我无法让 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 版本)

任何想法都将不胜感激。

【问题讨论】:

  • 可以添加堆栈跟踪吗?我会试着看看。

标签: asp.net-web-api odata


【解决方案1】:

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

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

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

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

[Queryable(EnsureStableOrdering = false)]

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2013-09-02
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2015-08-25
    相关资源
    最近更新 更多