私は、多階層の.NET 4 WPF、WCF、SQL 2008アプリケーション内のさまざまな "システムレベルのメッセージ"を監視し、記録する課題に取り組んでいます。ユーザーがログアウトしたりログアウトしたり、データが保存されたりするなど、私たちのアプリケーションで発生したイベントについては、ログに記録されます。SQLデータベーステーブルの変更を監視するための設計上の考慮事項
これらのメッセージのソースは、Windowsサービス、IISのWCFホスト、データベース内のストアドプロシージャなど、アプリケーションのいくつかの異なるコンポーネントから来る可能性があります。最終的にこれらのコンポーネントはそれぞれ独自の方法でSQLテーブルを変更します。これらのコンポーネントのそれぞれを独立して攻撃する私は、SQLの特定のテーブルが変更(更新、挿入)されたときに、メッセージがトリガされる必要があると言って簡単にできると思っています。
最初に気になるのは、変更を監視し軽量メッセージテーブルにレコードを挿入する各テーブルのトリガーです。私はいつも(99%の時間)データベースのトリガーが悪いニュース(Are database triggers evil?)であるという考え方をしてきました。私は個人的には、C#をSQLトリガーよりも開発してデバッグする方がはるかに多くなります。
代わりに、私はUsing SqlDependency to Monitor Database Changesにアクセスして、SqlDependencyクラスを使用して変更を検出する方法について説明しました。概念の迅速な証明がうまくいくようです。ただし、いくつかのコードサンプルを確認した後は、検出された変更ごとに新しいSqlConnection、SqlCommand、およびSqlDependencyオブジェクトを再初期化する必要があり、監視する必要があるクエリが3つまたは4つ必要になることがあります。
C#でSQLテーブルの変更を検出するためのより良いオプションがありますか?
また、トリガーバイアスは別として、単に別のテーブルにデータを再挿入するために、単に1組のテーブルの変更を監視することのように思えます。私はむしろC#で実装する必要があるいくつかの他のロジックがありますが、私はこれを行うためにトリガを書く必要がありますか?
思考?
クイックレスポンスありがとう!おそらくあなたは正しい。確かにこの場合(私の研究に基づいて)、私はトリガーが非常に単純にものだと思う。 –