私は DocumentStore (ネットワーク共有を表す高級用語) と、ストアにコピーされたドキュメントに関連するエントリを保持するデータベースを持っています。ファイル名とパーティション化されたディレクトリ構造にデータベース行の自動生成 (int) ID を使用します (たとえば、ID=4433 は最終的に '\004\433\0000004433.xxx' に配置されます)。
ファイルのコピー中にデータベースに何らかのロックを保持することは明らかにできませんが、どちらがより良い戦略であるかはわかりません。
a) データベースに行を追加して ID を取得し (おそらく InProgress フラグを使用)、ファイルをコピー先にコピーし、コピーが成功したら行を再度更新してフラグをクリアします。
b) 共有のルートにある一時ファイル名にファイルをコピーします。それが完了したら、新しい行をデータベースに挿入して ID を取得し、File.Move を呼び出して一時ファイルを正しい宛先に移動します。ファイルの挿入/移動がトランザクションで実行された場合、失敗すると、挿入がロールバックされ、他のユーザーには表示されません。
(b) 本当にコピー/削除ではなく移動であれば問題ないはずですが、これを行っても安全でしょうか?