3

答えを求めて高低を検索しましたが、私が試したすべての例でこれを機能させることはできません。

私は特定の双方向の親子関係を持っています。

親 (「Case」) は、子 (「CaseNotes」) のコレクションを保持し、次のようにマップされます。

HasMany<CaseNote>(c => c.Notes).KeyColumn("casesid").Inverse().Cascade.AllDeleteOrphan()

子は親を参照します:

References<Case>(c => c.ParentCase,"casesid").Cascade.All();

追加すると、アイテムはコレクションに追加されますが、明示的に保存されるまで DB に永続化されません (session.Flush() が呼び出されます)。

削除時には、次の手順が実行されます。

Case.Notes.Remove(item.CaseNote); //removes from the Notes collection in parent
item.CaseNote.ParentCase = null; //sets child reference to the parent to null

予想される動作は、AllDeleteOrphan() が delete ステートメントを介して null セットの子をスマートに削除することです。厄介なシナリオを除いて、すべて正常に動作します - Add と Delete がアイテムを永続化せずに順番に呼び出された場合 - AllDeleteOrphan() がトリガーされず、子の外部キー ID が単に null に設定されているように見えます (制約違反が発生しますが、私はとにかく、データベースにぶら下がっている子を望まない)。

誰もこの問題を見たことがありますか? 問題の潜在的な回避策のアイデアはありますか?

どんな助けも大歓迎です-これまでのところ運が悪いので、しばらくこれに取り組んでいます...

4

0 に答える 0