6

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 句を削除するにはどうすればよいですか?

どんな助けでも大歓迎です。

4

1 に答える 1