次の3つのテーブルがあるとしましょう:
表A、表B、表C。
テーブル C にはテーブル A への外部キーがあります。テーブル C にはテーブル B への外部キーがあります。
テーブル BI から行を削除するときに、テーブル C の孤立した行を削除したいのですが、テーブル A への参照を保持していない場合のみです。テーブル AI への参照を保持している場合は、テーブル B の行を削除し、テーブル C で外部キーを null に設定します。
それは可能ですか?デフォルトの動作は何ですか?
次の3つのテーブルがあるとしましょう:
表A、表B、表C。
テーブル C にはテーブル A への外部キーがあります。テーブル C にはテーブル B への外部キーがあります。
テーブル BI から行を削除するときに、テーブル C の孤立した行を削除したいのですが、テーブル A への参照を保持していない場合のみです。テーブル AI への参照を保持している場合は、テーブル B の行を削除し、テーブル C で外部キーを null に設定します。
それは可能ですか?デフォルトの動作は何ですか?
あなたのシナリオは、「カスケード」要件ではなく、典型的な「ビジネス要件」です。
ここで詳細に説明したように: SQL Server でカスケードを使用する場合/理由は? (後ろの仕組みはSQLカスケードデリート/NHibernateカスケードデリートと同じ)
- ...
- カスケード削除は、関係のセマンティクスに排他的な「の一部」の記述が含まれる場合に意味があります。たとえば、OrderLine レコードはその親注文の一部であり、OrderLines は複数の注文間で共有されることはありません。Order が消失した場合、OrderLine も消失するはずであり、Order のない行は問題になります。
- カスケード削除の標準的な例は SomeObject と SomeObjectItems で、アイテム レコードが対応するメイン レコードなしに存在しても意味がありません。
- ...
繰り返しますが、これらは SQL サーバーの機能に関するものですが、NHibernate カスケード機能にも適用されます。
したがって、あなたの場合、削除についてかなり複雑なロジックがある場合、答えは次のようになります。