私はテーブルAとテーブルBを持っています:
TableA(IDTableA,...) TableB(IDTableB, IDTableA,...)
これをデータベースに設定すればcascadaで削除できることは知っていますが、データベースでこれを定義しておらず、EFの子を削除したい場合は、これが最善の方法ですか?
この状況を想像してみてください。ユーザーAがコンテキストに親を追加し、ユーザーAが子をコンテキストに追加し、親と子を削除済みとしてマークして、変更を保存します。しかし、ユーザーAが子をロードして変更を確認するまでの間にユーザーBが新しい子を追加した場合、ユーザーBによって追加された新しい子は削除されないか、参照整合性のために例外が発生します。
トランザクションを使用して親を削除済みとして設定しようとすると、次の手順で、を作成するsavechanges
と、親レジスタがロックされるため、他のユーザーがロードできなくなります。ただし、問題は同じです。他のユーザーは、親がロードされてから変更が保存されるまでの間に、親に変更を加えることができます。
だから私の質問は、EFを持つ親とそのすべての子を削除したい場合、これが最善の方法ですか?最善の方法は、親をN回削除してみることです。私が良いパフォーマンスをしたいとき、これは良いオプションですか?
ありがとう。ダイムロック。