Reputation: 47462
I have a standard parent - child (1:many) relationalship, configured using Fluent NHibernate:
On the parent side:
HasMany(x => x.Items).Inverse().Cascade.All();
and on the child side:
Map(x => x.ItemCategory).Nullable().Index("idx_item_category").Not.LazyLoad()
(Edit in response to epitka's comment:)
The record is deleted by calling
session.Delete(item_category)
This is the only operation done in the transaction.
(End Edit)
Currently when I delete an ItemCategory record it cascade the delete to all the items, which appears to be working as expected according to the documentation.
What I want is for Item.ItemCategory to be set to null automatically when the ItemCategory record is deleted.
I can only seem to turn off the cascade completely, which leads to a broken database (item's referencing a missing category). So, currently I have to do this manually which is a little more error prone than I'd like.
Is it possible to configure this behaviour?
session.Delete(item_category)
Upvotes: 1
Views: 1282
Reputation: 52725
Whil it's not possible to do that out of the box, you can probably implement an IPreDeleteEventListener
that fires an HQL update to set the Items' ItemCategory to null.
Upvotes: 1