【发布时间】:2013-10-22 22:25:54
【问题描述】:
使用 NHibernate v3.0。我有一个类似的课程:
class Foo
{
bool barActive;
Bar bar;
}
Bar 实例完全由 Foo 内部管理:
- 当“barActive”为真时,“bar”设置为 Bar 实例。
- 当“barActive”设置为 false 时,“bar”字段设置为 null。
Foo.bar 的映射如下:
<many-to-one name="bar" column="BarId" cascade="all-delete-orphan" unique="true" />
但是,当“bar”设置为null时,它不会删除数据库中的Bar记录。 Bar 是一个在其他地方也使用的继承类,所以我不能只将此字段作为组件。
我本来希望“唯一”约束 +“删除孤儿”来处理这个问题。我是否遗漏了什么,或者 NHibernate 不能透明地处理这个?如果不能,似乎我唯一的选择是引发一个事件,以便更高级别的范围可以调用 ISession.Delete(bar)。
【问题讨论】:
-
a
many-to-one映射没有级联中的 all-delete-orphan 选项。只有all|none|save-update|delete。见这里nhforge.org/doc/nh/en/index.html#mapping-declaration-manytoone -
那为什么 NHibernate 接受映射没有错误呢?无论如何,你有办法完成我正在寻找的东西吗?
-
据我所知,NHibernate 无法自动删除
many-to-one关系的孤儿,因为代码中没有检查。如前所述,它将级联其他 4 个。有这张 jira 票 216.121.112.228/browse/NH-1262 我认为是相关的,但是您可以专门针对您的问题打开另一个票。
标签: nhibernate