Dapperを使用してSQLをトレースする方法はありますか?

dapper

質問

生成されたSQLをデバッグログなどにダンプする方法はありますか?私はwinformsのソリューションでそれを使用しているので、ミニプロファイラーのアイデアは私のために動作しません。

受け入れられた回答

私は同じ問題を抱え、いくつかの検索を行った後にコードを実装しましたが、すぐに使えるものはありませんでした。 Nuget MiniProfilerにパッケージがあります。私が共有したいと思っている統合

Update V2 :他のデータベースサーバとの連携をサポートしています。MySQLの場合は、 MiniProfiler.Integrations.MySql

SQL Serverを使用する手順は次のとおりです。

1.接続を開始する

var factory = new SqlServerDbConnectionFactory(_connectionString);
using (var connection = DbConnectionFactoryHelper.New(factory, CustomDbProfiler.Current))
{
 // your code
}

2.すべての作業が完了したら、必要に応じてすべてのコマンドをファイルに書き出します

File.WriteAllText("SqlScripts.txt", CustomDbProfiler.Current.ProfilerContext.BuildCommands());

エキスパート回答

Dapperは現在、ここに計測点を持っていません。これはおそらく、私たち(著者として)がこれを処理するためにミニプロファイラを使用しているという事実に注意する必要があります。しかし、それが役に立ったら、ミニプロファイラーのコア部分は実際にはアーキテクチャーニュートラルになるように設計されています.Winforms、wpf、wcfなどを使って他の人に知っています。プロファイリング/トレース接続ラッパー。

理論的には、ブランケットのキャプチャポイントを追加することは完全に可能ですが、私は2つのことを心配しています。

  • (主に)セキュリティ:dapperはコンテキストの概念を持っていないので、悪意のあるコードが静かにアタッチして、dapperを経由するすべてのsqlトラフィックを盗聴するのは本当に簡単です。私は本当にその音が気に入らない(これは、呼び出し側が接続を所有しているので、 "デコレータ"アプローチの問題ではないので、ログのコンテキスト)
  • (セカンダリ)パフォーマンス:しかし...実際には、シンプルなデリゲートチェック(おそらくほとんどの場合nullになる)が大きな影響を与えるとは言い難い

もちろん、あなたができるもう一つのことは、ミニラボプロファイラから接続ラッパーコードを盗み、プロファイラコンテキストのものを単にDebug.WriteLineなどで置き換えることDebug.WriteLine



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow