質問: 1 ``` 生成されたクエリは、多くのレコードを持つデータベースで実行するまでにはるかに時間がかかります。 最初のクエリを生成する必要があります。 私がちょうどこれをすれば: ``` _dbContext.People.Count (); ``` Entity Frameworkは次のクエリを生成します。 ``` Select count (*) from People ``` ..非常に速く走る。 この2番目のクエリを生成する方法は、検索条件をカウントに渡しますか?
回答: ここで答えるべきことはあまりありません。 ORMツールが単純なLINQクエリから期待されるSQLクエリを生成しない場合、クエリを書き直してそれを実行する方法はありません(最初にそれを行うべきではありません)。 EF Coreには、 *LINQクエリ*での*クライアント/データベース*の*混合評価の*概念があり、お客様の場合のように、クエリ処理が不完全/非常に非効率なEF Coreバージョンをリリースできます。 以下からの抜粋EFコア内の機能ではない (言葉**ではない**点**に**注意してください)とロードマップ : > より多くのクエリを正常に実行できるように翻訳を改善し、(メモリ内ではなく)データベースでより多くのロジックを評価します。 > > まもなく、クエリ処理の改善を計画していますが、いつ発生するか、どの程度のレベルかはわかりません(混合モードではクエリが「機能している」と見なすことができます)。 それでは、オプションは何ですか? * まず、EF Coreが本当に役立つようになるまでEF Coreに近づかないでください。 EF6に戻ると、このような問題はありません。 * EF6を使用できない場合は、最新のEF Coreバージョンで更新されたままにしてください。 たとえば、v1.0.1とv1.1.0の両方でクエリを実行すると、目的のSQL(テスト済み)が生成されるため、単純にアップグレードでき、具体的な問題はなくなります。 しかし、新しいリリースではバグ/リグレッションが改善されることに注意してください(ここでわかるように、EFCoreは単純なLEFT OUTER結合に対して多すぎる列を返します)。 どちらがあなたにぴったりか :)