0

次の3つのテーブルがあるとしましょう:

表A、表B、表C。

テーブル C にはテーブル A への外部キーがあります。テーブル C にはテーブル B への外部キーがあります。

テーブル BI から行を削除するときに、テーブル C の孤立した行を削除したいのですが、テーブル A への参照を保持していない場合のみです。テーブル AI への参照を保持している場合は、テーブル B の行を削除し、テーブル C で外部キーを null に設定します。

それは可能ですか?デフォルトの動作は何ですか?

4

1 に答える 1

0

あなたのシナリオは、「カスケード」要件ではなく、典型的な「ビジネス要件」です。

ここで詳細に説明したように: SQL Server でカスケードを使用する場合/理由は? (後ろの仕組みはSQLカスケードデリート/NHibernateカスケードデリートと同じ)

  • ...
  • カスケード削除は、関係のセマンティクスに排他的な「の一部」の記述が含まれる場合に意味があります。たとえば、OrderLine レコードはその親注文の一部であり、OrderLines は複数の注文間で共有されることはありません。Order が消失した場合、OrderLine も消失するはずであり、Order のない行は問題になります。
  • カスケード削除の標準的な例は SomeObject と SomeObjectItems で、アイテム レコードが対応するメイン レコードなしに存在しても意味がありません。
  • ...

繰り返しますが、これらは SQL サーバーの機能に関するものですが、NHibernate カスケード機能にも適用されます。

したがって、あなたの場合、削除についてかなり複雑なロジックがある場合、答えは次のようになります。

  • 削除定義をデータ層の外に移動(NHibernate マッピング)
  • ビジネスレイヤー内に配置します。その周りにルールを作成し、ロジックが機能していることをテストで保証します(ペシスタンスエンジン、つまりNHibernateに関係なく)
  • ユーザーが要求を調整すると、あなたの/カスタムの削除ロジックから将来的に利益が得られます。あなたはNHibernateによって制限されることはありません...
于 2014-11-25T05:29:41.980 に答える