【发布时间】:2011-04-18 17:42:10
【问题描述】:
您好,我有一个一对多的 ComplianceSet -> ComplianceItem。 ComplianceItem 有一个一对多的 ComplianceItem -> ComplianceItemInstance。
我有
合规集
HasMany(x => x.GetUserComplianceItems()).Inverse().Access.CamelCaseField(Prefix.Underscore).LazyLoad().Cascade.AllDeleteOrphan();
和
合规项目
HasMany(x => x.GetUserComplianceItemInstances()).Inverse().Access.CamelCaseField(Prefix.Underscore).LazyLoad().Cascade.AllDeleteOrphan();
然后在我的代码中我有
userComplianceSet.GetUserComplianceItems().FirstOrDefault(....);
...
userComplianceItem.RemoveUserComplianceItemInstance(userComplianceItemInstance);
这段代码返回
已删除的对象将被级联重新保存(从关联中删除已删除的对象)[DecisionCritical.Core.Domain.UserComplianceSet#12]
现在这非常令人沮丧。如果我从两个集合中删除级联,则代码返回成功,但数据库显示它没有做任何事情。 ComplianceItemInstance.ComplianceItemId 字段仍然被填充,当然该项目仍然存在。 无论如何,我只想能够从集合中删除一个孩子,对持有该集合的对象调用 save 并让这该死的东西消失。我已经尝试了级联的各种排列方式,保存(保存集合,保存项目)将删除添加到 ComplianceItemInstance 等等,但无法让它工作。
请帮忙
【问题讨论】:
-
RemoveUserComplianceItemInstance 的代码是什么?
-
好的,所以我弄清楚了问题所在,我认为 Ilya 即将向我指出这个方向。因为这是一个双向关系,所以我必须在保存父级之前设置 UserComplianceItemInstance.UserComplianceItem = null。
-
现在我尝试了各种方法,其中之一是使它成为单向引用,但是(当时我不知道)如果 fk 设置为不为空db 表单向引用不起作用,因为它使用 null fk 保存子项,然后使用 fk 更新子项。我收到“无法在 fk 中插入 null”错误,并假设我走错了路。不管怎样,现在一切都好起来了。虽然少了几天的生活。我可以标记加一以找出我自己的答案吗? :)
-
是的,您可以回答自己的问题并选择您的答案作为接受的答案,甚至鼓励这样做。见这里:meta.stackexchange.com/questions/17845/… 和这里:meta.stackexchange.com/questions/12513/… 和这里:meta.stackexchange.com/questions/17463/…
标签: nhibernate fluent-nhibernate cascade inverse