2017-06-29 14 views
0

エンティティフレームワークを使用するいくつかのレガシーコードがあります。エンティティフレームワークの下で

コードをデバッグすると、EF DbContextにテーブル全体が含まれていることがわかります。それはODataによってフロントエンドに渡され、角度処理されました。

私は検索しようとしましたが、EFで1つのレコードしか取得できないのでしょうか?

どこでも私はSingleOrDefaultメソッド、または他のIQueryableを参照してください。しかし、理解したように、これらはcollectionsの一部です。

マイクロソフトのコメント:コレクションに要素が含まれていない場合、既定値(TSource)の値が使用されない場合があります。

これは、EFが常にテーブルからすべてのデータを取得し、後で使用できることを意味しますか?

または、内部クエリで1つだけの行を取得する方法がありますか?

私たちはpostgresqlを使用しています。

+0

'.Take(1)'を試したことがありますか、それともあなたを誤解していますか? –

+1

あなたの質問は意味をなさない。はい、あなたはどこでも 'Single()'やその他のメソッドを呼び出すことができます。 – SLaks

+0

と内部クエリ 'SELECT * FROM table WHERE id = 23'になりますか? – vaso123

答えて

1

Entity Frameworkを使用すると、LINQを使用してクエリを実行し、単一レコードまたは限定セットを取得できます。ただし、.NETプロジェクトでは、コントローラは、結果をクライアントアプリケーションに返す前に、ODataクエリパラメータを解析し、データセットをフィルタ処理する必要があります。コントローラーコードをthis tutorialと照合して、何か不足しているかどうかを確認してください。

何らかの形で組み込みのODataフレームワークをバイパスしている場合は、どのクエリがすぐに実行されるか、どのクエリが遅延するかを理解することが役立ちます。どのオペレーションがデータベースへのトリップを強制的に実行するのかを正確に理解するためには、を参照して、できるだけ遅くまで直ちに実行するものを保留しようとしてください。

+0

私はこれが私の必要なものだと思います。私がチェックしている間、私はちょうど1日が必要です。 'public SingleResult Get([FromODataUri] int key)'が機能するなら、私はそれを受け入れます。 Upvote。 – vaso123

+0

@ vaso123ありがとう、 '' '[EnableQuery]' 'デコレータを追加して、ASP.Netが自動的にODataクエリのパラメータを解析できるようにしてください。 – RemedialBear

+0

ありがとうございます。 – vaso123

1

いいえ、を正しく使用すると、EFはテーブル全体をメモリに選択しません。。正しく;私は:

context.Table.First(); 

1つの行だけを返すSQLクエリに変換し、呼び出し元のコードに戻すオブジェクトにマップします。これは、上記のコードがLINQ-to-Entitiesを使用するためです。あなたの代わりにこのようなものでした場合:

context.Table.ToList().First(); 

を次にテーブル全体がToList仕事をするために選択され、LINQツーオブジェクトはFirstを処理します。だから、あなたが遅れて列挙して(前もって結果を実現しないで)あなたの質問をする限り、あなたは大丈夫でしょう。

+2

ASP.NET MVC ODataを使用している場合、コントローラーが基本クエリーを返し、クライアントから渡されたURIが、SQLに変換されて実行される前にコントローラーから返されたクエリーで構成されるため、少し混乱します。 –

+0

@ DavidBrowne-Microsoft Performanceは、エンタープライズプロジェクトのボトルネックです。私はC#とASP.NETを初めて使用しているので、コードを調べる時間があります。私が悲しんでいるように、我々はpostgreを使用しています。何がお勧めですか?私たち自身のDB層( 'Db.getRow(sqlCmd) 'のような)を書くべきか、' SELECT field1、field2 FROM users WHERE id = 242'(何が私たちのために1行戻っていますか)、EFで可能ですか?そして、EFとODataをドロップしてください – vaso123

+0

"何をお勧めしますか?"効果的にEFとODataを使用する方法を学びます。 –

関連する問題