2010-10-19 64 views
1

我有一个标准的父 - 子(1:许多)relationalship,配置为使用功能NHibernate:(流利)NHibernate的:迫使外国键为null上删除

在父方:

HasMany(x => x.Items).Inverse().Cascade.All(); 

而对孩子的一面:

Map(x => x.ItemCategory).Nullable().Index("idx_item_category").Not.LazyLoad() 

(编辑回应epitka的评论:)

记录是通过调用

session.Delete(item_category) 

这是在交易完成的唯一操作删除。

(完编辑)

目前,当我删除I​​temCategory记录它级联删除对所有项目,这似乎是工作根据文档预期。

我想要的是当ItemCategory记录被删除时,Item.ItemCategory自动设置为空

我似乎只能完全关闭级联,导致数据库破损(项目引用缺失的类别)。所以,目前我必须手动执行此操作,这比我想要的更容易出错。

是否可以配置此行为?
使用Session.delete(item_category)

+0

你是怎么删除它的?你是从集合中删除它,发出HQL删除,还是其他的东西。向我们显示代码... – epitka 2010-10-19 20:20:38

回答

1

得到控制而这是不可能做到这一点开箱即用,你也许可以实现一个IPreDeleteEventListener将触发一个HQL更新设置项ItemCategory为null。