【发布时间】:2013-04-09 18:14:30
【问题描述】:
我将 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 Profiler 看到的查询::
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
我没有要求任何订购,按条款订购。 EF 自己将 ORDER BY 子句添加到 Query 中。添加的 Order By 子句包含表的所有列。该表有 300 万条记录,查询超时,因为它是按所有列排序。
我通过删除 Order By 进行了测试,不到一秒钟就完成了
所以问题是
如何阻止实体框架(支持 Web Api Odata)向 Sql Query 发送 Order By 子句。
如何从服务器上运行的 SQL 查询实体框架(Web Api Odata)中删除 Order By 子句?
感谢任何帮助。
【问题讨论】:
标签: entity-framework asp.net-web-api odata