用的OData(网页API)实体框架发送Order By子句默认情况下,以SQL查询(Entity

2019-08-31 08:19发布

我使用的Web API和OData的。 我有在EF 5.0中定义的实体。 我送非常简单的请求控制器::

 $.ajax({url: "/odata/Details?$top=10",
            type: "GET",
            dataType: 'json',
            success: function (data) {
               viewModel.list(data.value);
            }

现在我的控制器代码::

 [Queryable]
    public override IQueryable<Area> Get()
    {  
    return db.Area.AsQueryable();
    }

查询我看到使用SQL事件探查::

 SELECT TOP (@p__linq__1) 
[Project1].[id] AS [id1], 
[Project1].[name] AS [name1], 
[Project1].[pucrhase] AS [pucrhase1], 
[Project1].[sale] AS [sale1]
FROM Area
ORDER BY [Project1].[id] DESC, [Project1].[name] ASC, [Project1].[pucrhase] ASC,      
[Project1].[sale] ASC,N',@p__linq__1 int,@p__linq__1=10

我没有要求任何排序,ORDER BY子句。 EF通过本身增加ORDER BY子句来查询。 为了通过添加子句包含table.This表的所有列有300万次的记录和查询超时,因为它是由所有列排序。

我测试通过移除顺序按花了不到一秒钟完成

所以,问题是

如何从发送ORDER BY子句的SQL查询停止实体框架(支持网络API的OData的)。

如何从SQL查询实体框架(网页API的OData)删除Order By子句运行服务器上?

任何帮助表示赞赏。

Answer 1:

林不知道这是否是正确的答案,但即时假定OData服务试图通过保持你的模型中的排序上的所有特性稳定的排序顺序。

因此尝试

[Queryable(EnsureStableOrdering=false)]


文章来源: Entity framework with OData(Web API) is sending Order By clause By default to Sql Query