views:

33

answers:

1

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)

+1  A: 

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.

Diego Mijelshon