データベースの変更を待機する Windows サービスがあります。
それが見るデータベーステーブルは次のようになります:
ID [ガイド]
名前 [テキスト]
MatchId [Guid] => これは外部キーです
MatchDateTime [日時]
誰かが「MatchId」フィールドを「クリア」した (NULL が割り当てられた) たびにサービスが検出するようにしたいのですが、
次に、「MatchId」フィールドに「NULL」が含まれるすべての行に対して、それらの一致を見つけて「MatchId」フィールドを割り当てるアルゴリズムを実行します。
問題は、「SqlDependency」クラスを使用し、それが「MatchId」フィールドでトリガーされるのを待つ場合、新しい行が影響を受ける場合にのみ通知されますが、「MatchId = NULL」の既存の行は通知されません。について知る。
これは、Windows サービスがロードされ、テーブルに「MatchId = NULL」の行が既に 20 行あり、次の 5 時間は誰も「MatchId」行を「クリア」しない場合、つまり、私にはわからないことを意味します。既存の 20 行についてであり、それらを処理しません。
1 つの解決策は、「SqlDependency」をセットアップする前に、「MatchId = NULL」の既存の行があるかどうかを確認するために簡単な「選択」を実行し、存在する場合はそれらを処理してから、依存関係をセットアップすることです。
問題は、これらの行の処理が終了してから SqlDependency を設定するまでの短い間隔で、誰かが行を 'MatchId = NULL' に変更したというイベントが発生する可能性があることです。 Sql依存関係。
これをどのように解決できるか考えていますか?
(最悪の場合は、SqlDependency を使用せず、XXX 分ごとにデータベースをポーリングする必要があります ...)