私のアプリケーションには、スレッドローカルストレージを使用することで満たすことができると思う要件がありますが、それが避けるのが最善の方法の1つであるかどうか疑問に思っています。
私はこの主題に関するいくつかの記事を読みました:
http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=58
http://msdn.microsoft.com/en-us/library/system.threadstaticattribute(vs.80).aspx
私はそれを使う方法を知っています、私はそれを使うべきかどうか疑問に思っています。
何かアドバイス、知っておくべきことはありますか?
[編集]
ユースケースは次のとおりです。
私は、各クエリについて多くのログを記録するいくつかのメソッドを介してすべてのデータアクセスを集中させます。ログに記録するのは、コマンドが入力されたコマンドテキストの完全なダンプです。これにより、トレースログから直接SqlManagementStudioにコピーアンドペーストできます。
Webアプリのglobal.asaxで、未処理の例外が発生したときに、できるだけ多くの情報を記載したメールを管理者に送信します。SqlExceptionが発生したときに、そのsqlコマンドダンプテキストをこの電子メールに入れたいと思います。これにより、クエリが原因でページが爆発したときにトレースログを調べる時間を節約できます。
データアクセスクラスのメソッドシグネチャを変更したくないのは、例外が発生したときに参照を取得するために、スタックの最後まで参照を渡すことができるようにするためです。TLSは「lastsqlcommand」のようなものを置くのに良い場所かもしれないと思っていましたが、それは実行可能な解決策のようには見えません。