• システム開発に関わる内容をざっくりと書いていく

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

EF Core 利用中に「どんな文が飛んでいるか」が見えないと、N+1 や想定外の結合に気づけない。ログ/インターセプタ/デバッガ出力など、環境に合わせた確認手段を持っておく。

先に結論

  • 手早いのは LogLevel で EF のコマンドカテゴリを Information にする
  • 開発だけなら EnableSensitiveDataLogging(パラメータ値も出る。本番禁止寄り)
  • ToQueryString() で特定 LINQ の文面をその場確認
  • 本番はログレベルと個人情報に注意。必要な相関 ID だけ残す

よく使う手段

  • ログ: Microsoft.EntityFrameworkCore.Database.Command を Information
  • DbContext 設定: sensitive / detailed errors は Development のみ
  • ToQueryString: まだ実行前の文面確認に便利
  • インターセプタ: 実行前後で計測や赤旗検知
  • プロファイラ/拡張: SSMS 側や MiniProfiler 等

見るときのポイント

  • 同じ表への連続読み(N+1)がないか
  • Include の付けすぎで巨大結合になっていないか
  • クライアント評価に落ちていないか(警告ログ)
  • トランザクション境界とコマンド数が想定通りか

関連: DbUpdateException の切り分け / 実行計画

設定例(概念)

アプリ設定で EF の Database.Command カテゴリを Information にし、開発環境のみ sensitive logging を有効化する、が定石。出力先はコンソール/デバッグ/集約ログ基盤のいずれか。

ざっくりまとめ

  • まずカテゴリログで発行文を見える化する
  • sensitive は開発限定
  • 見えた文を計画・N+1 改善につなげる

関連記事