2

さまざまな異なるADOテクノロジを使用する非常に大きなコードベースがあります(つまり、一部のEF、場合によってはADO.Netを直接使用します)。

実行された正確なSQLステートメント、所要時間、返された結果などの情報の監査を開始できるように、ADO.Net呼び出しをグローバルにインターセプトする方法があるかどうか疑問に思っています。

主なアイデアは、これを実行できれば、既存のコードを変更する必要はなく、ADO.Netをインターセプト/ラップするだけでよいということです...これは可能ですか?

編集

PostSharpCciSharp 、またはAfterthoughtを調べることをお勧めしますが、これらのいずれかを使用して目的の結果を得るにはどうすればよいですか?

4

2 に答える 2

1

いいえ。ADO.NETタイプに対して直接コーディングしている場合は、DynamicProxyに「ねえ、これらすべてのDLLでSqlConnectionを使用する場所にプロキシを配置する」とだけ伝えることはできません。DynamicProxyは、ランタイムプロキシジェネレーターです。コンパイル後のAOPが必要なようです。代わりに、 PostSharpCciSharp 、またはAfterthoughtを調べてください。

編集:これらのツールのどれも十分でない場合は、Mono.Cecilを使用してILを直接変更できますが、それは簡単ではありません。たとえば、次を参照してください。

于 2011-05-03T17:00:29.730 に答える
0

vdh_ant

実行された正確なSQLステートメント、所要時間、返された結果などの情報の監査を開始できるように、ADO.Net呼び出しをグローバルにインターセプトする方法があるかどうか疑問に思っています。

代わりに、 RDBMSで利用可能なプロファイリングツールを使用してみませんか?これらは、特定のDB APIに関係なく、すべてのSQLステートメントとクエリをキャプチャするという点でより一般的です。さらに、標準のパフォーマンス分析と統計をすぐに利用できます。

もう1つのオプションは、独自のダミーADO.NETプロバイダーを作成することです。おそらくSystem.Data.Common、DB固有の機能が必要な場合は、特定のプロバイダーからのクラスまたは特定のプロバイダーの周りのクラスのラッパーとして作成します。そのラッパーは、必要な情報をログに記録し、実際の作業を基盤となるネイティブプロバイダーに委任することができます。

于 2019-03-22T13:30:29.843 に答える