2011-01-26 16 views
0

私は、テーブル行を削除するWindowsサービスを持っています。 wcfサービスで行がロードされている場合(いくつかの操作を行うために)、行を削除する必要はありません。それは私がいくつかのロック機構を置く必要があるようだが、私はそれを行う方法を見つけることができません。この点に関する助けとなりますか?linq to sql同時実行の問題!

ありがとう Jamal。

答えて

0

長期データベースロックを保持しないでください。元の表に戻ってくる外部キーを持つロードされた行ごとにIDの表など、何らかの種類のマーキング手法を使用します。これにより、WCFサービスが補助テーブルのエントリを削除するまでの削除が防止されます。また、WHERE NOT EXISTS (SELECT * FROM loaded_rows WHERE id = outer.id)をDELETEステートメントに追加することで、安全な削除が可能になります。

このモデルでは、補助テーブルに「loader_id」列を追加することで、複数の「ローダー」を使用することもできます。

提案されたアプローチの主な問題は、WCFサービスが行を終了したときに行を削除する必要があることです。これがバグやクラッシュのためにこれを怠った場合、行は永久にロックされます(または少なくともDBAが徘徊するまで)。これを回避するには、主に何らかの有効期限メカニズムを中心にさまざまな方法があります。