OData で Web Api を使用しています。私は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
私は注文、オーダーバイ条項を要求していません。EF は、Query に ORDER BY 句をそれ自体で追加します。追加された Order By 句には、テーブルのすべての列が含まれます。このテーブルには 300 万件のレコードがあり、クエリは Ordering by All columns であるためタイムアウトします。
Order By を削除してテストしましたが、完了するまでに 1 秒もかかりませんでした
だから質問は
エンティティ フレームワーク (Web Api Odata のサポート) が Order By 句を Sql Query に送信するのを停止する方法。
サーバー上で実行される SQL Query Entity フレームワーク (Web Api Odata) から Order By 句を削除するにはどうすればよいですか?
どんな助けでも大歓迎です。