5

次のサンプルコードがあります。

  Context context = new Context();
  Repository repository = new Repository(context);

  Post post = repository.First<Post>(x => x.Id == 1);

  Model model = new Model {
    Created = cube.Created,
    Id = cube.Id,
    Name = cube.Name,
    Pack = cube.Pack.Id,
    Mimes = context.Files.Where(x => x.Id == 1).Select(x => x.Mime).ToList()
  };

データベースに送信されている SQL クエリを見つける必要があります。

SQL Express と VS 2012 を使用して EF クエリをプロファイリングするにはどうすればよいですか?

これのためのツールはありますか?

4

2 に答える 2

19

他の回答で指定されているEFプロファイラーは非常に強力ですが、無料ではありません($$、ディスク容量、時間)。また、NHibernate とRavenDBで有名なOren Einiによって作成されました。

ピンチで使用するのが好きなツールは、はるかに軽量であり、もちろん、機能の点で EF Prof と比較することはできませんが、コスト ($$、時間、およびディスク) は、またはそれに近づいています。 、 ゼロ。

LocalDb で EF を使用してこれらの軽量プロファイラーをテストしましたが、それらの主な使用例は、より伝統的な Sql Server フレーバー (Express を含む) です。

ExpressProfiler

最も簡単に使用できるもの (そして最も必要最小限の SQL ステートメントを表示する kthxbye) は、CodePlex の ExpressProfilerです。

ここに画像の説明を入力

そして、プログラム全体が 1 つの 126 KB EXE です。これで軽量化!

AnjLab SQL プロファイラー

もう 1 つはDataWizardのもので、以前は無料でした (現在、価格は $5 からとなっているようです)。

GitHub がオープンソースだったときに、誰かがスナップショットを GitHub (xcopy でインストール可能なバイナリを含む)に保存することに成功しました。

実行可能ファイルは「AnjLab Sql Profiler」として表示され、表示されたイベントをフィルタリングできますが、有効/無効にできるイベントの種類が非常に多いため、この長所は短所でもあります。すべてが選択されている場合、出力は圧倒的に冗長になります。

特定のイベントのみを選択することで、より健全な出力を得ることができます。

ここに画像の説明を入力

上記の出力を得るために選択したイベントは次のとおりです。

ここに画像の説明を入力

于 2014-01-17T16:46:47.183 に答える
4

ここにはいくつかのオプションがあります。

  1. https://stackoverflow.com/a/7901917/1070291((ObjectQuery)query).ToTraceString()を参照して、実行時にクエリを出力してクエリを調べます(これはクエリに対してのみ機能するため、上記のシナリオでは最適ではない可能性があります)。
  2. Management Studio に組み込まれている SQL プロファイラーを使用する
  3. Entity Framework Profilerを使用します(試用版を備えた非常に優れたサードパーティ製ツールです。これは、クエリの分析に使用するものです)
于 2012-12-11T08:33:39.193 に答える