EF Coreで発行しているSQLを確認する方法

Entity Framework Core(EF Core)で発行しているクエリが遅い!

こんなとき、EF Coreがデータベースにどのようなクエリを発行しているか確認したくなりませんか。

Linqを通してクエリを記述しているため、実際のクエリを意識することなくデータベースに問い合わせることができます。

しかし、複雑なクエリ組み、思ったよりパフォーマンスがでないときは
どこに原因があるか確かめて改善したいですね。

そこで、今回はLinqから発行されているSQLを確認する方法を紹介します。

EF Coreで発行しているSQLを確認する方法

それでは結論からいきます。

  • SQLを確認するには、OnConfiguringメソッドの中で、LogToメソッドで可能

です。


では、LogToメソッドには何を引数に渡していけばよいのか確認していきましょう。

コンソールアプリはコンソールでさくっと確認

最初はコンソールでの出力をする場合です。


LogToメソッドにConsole.WriteLineを渡すだけで可能です。
Entity Framework がデータベースに実際に問い合わせている生のクエリを

コンソール上に吐き出させることができます。


製造過程であれば、さくっと確認できますね。

しかし、コンソールアプリ以外ではこの方法は使えないこともあります。

そこで、次にどのアプリからでも使える方法を見ていきましょう。

WEBもしくはWindowsアプリとかで使う場合

Visual Studioの出力ウインドウに表示する例です。

コンソールを使わない、WebアプリやWindowsアプリでは、こちらのほうが開発中に役に立つでしょう。


書き込む方法をConsole.WriteLineからDebug.WriteLineに変更しています。

引き数の関係でラムダ式での記載していますが、
出力先が変わるだけで、出力内容は先ほどと一緒になります。

Debug.WriteLineはVisual Studioへ出力するので、コンソールアプリや他のアプリで使うことができます。

ログをファイルに落とす方法

開発中は実行後にも確認したいことがありますよね。

そういう時はファイルに書き込んでしまいましょう。

StreamWriter.WriteLineメソッドをLogToメソッドに渡すことで、同じことができます。

お試しください。

まとめ

この記事のまとめです。

  • SQLを確認するには、OnConfiguringメソッドの中で、LogToメソッドで可能
  • LogToメソッドにはコンソール出力、Visual Studio出力、ファイル出力、etc.様々な出力が可能

Linqで実行されるクエリがきになるとか、いざLinqで組んだクエリが遅いとかは
特に生のクエリを確認したくなります。

そんなときに、今回紹介した方法が参考になればうれしいです。

では。