私は、次のLINQクエリIDリターンを使用してLINQクエリは、(EFコア)を遅くする結果
internal List<ZipCodeInfo> GetInfoFromZipCode(string zipCode)
{
using (DbContext context = new DbContext())
{
IQueryable<ZipCodeInfo> results;
results = (from a in context.Address
where a.ZipCode.Equals(zipCode)
select new ZipCodeInfo
{
Field1 = a.Field1,
Field2 = a.Field2,
Field3 = a.Field3
});
return results.ToList();
}
}
を持っていますが、クエリ自体が完了するまで約5~6秒かかります。私はSQL上の対応するクエリを実行し、それを完了するためにほとんど何もかかりません。それはなぜそれを取っているのですか?最後のクエリでは4つの一致が返され、ここで行うことはあまりありません。
このクエリはコントローラクラスの一部であり、ASP.NET CoreとEntityFramework Coreを使用しています。
SQLクエリは、btwのようになります。
SELECT *
FROM Address
WHERE ZipCode = '29130'
理由は、L2Sまたはエンティティフレームワークが最適化クエリを発行しないことがあります。実行パスは常に大きいわけではありません。別の方法として、ストアドプロシージャを作成し、エンティティフレームワークを使用して呼び出す方法があります。完全なソリューションが必要な場合はお知らせください。 –
あなたはdb内のストアプロシージャを意味しますか?残念ながら、私はdbを制御することはできません。クエリを実行するためのアクセス権を読み取り、ストアプロシージャを追加することはオプションではありません。他の方法がある場合は、任意のアイデア?おそらく私はEFを取り除き、通常のSQL接続を使用する必要がありますか? – user3587624
なぜそれは時間がかかるのか簡単です。関数EFを呼び出すたびに、SQLスクリプトを作成してコンパイルします。だから、いつも時間がかかるでしょう。代替案を考えてみましょう。しかし一方で、古い学校に行ってADOにこの機能だけを試すことはできますか? –