流畅的NHibernate级联删除问题

时间:2010-12-03 01:03:33

标签: c# nhibernate fluent-nhibernate

我遇到了流利的nhibernate级联删除问题。我确定我做错了,因为它不起作用。

以下是我的目标:

public class Parent
{
    public int Id { get; set; }
    public IList<SequencedChild> SequencedChildren { get; set; }
}

public class SequencedChild 
{
    public int Id { get; set; }
    public int ParentId { get; set; }
    public int ChildId { get; set; }
    public int Sequence { get; set; }
}

public class Child 
{
    public int Id { get; set; }
}

这是我的映射:

HasMany(m => m.SequencedChildren).Inverse().Cascade.Delete();

所以我有一个父母有一些有序的孩子,我想更新那个父母没有孩子。当我在该父级上没有顺序子节点的情况下进行更新时,我希望在我的SequencedChild表中删除具有父节点id的记录。但由于某种原因,NHibernate尝试使用null更新这些记录的ParentId - 由于ParentId不为空而失败。 编辑:我也期待Child对象不受影响(表现正常)。

我看了几个问题,他们都建议使用逆,但我已经这样做了。我做错了什么?

2 个答案:

答案 0 :(得分:3)

所以我设法找到了一个解决方案,结果是有多个步骤:

  1. 正如詹姆斯在评论中指出的那样,ParentId / ChildId应该是父/子参考,而不仅仅是ids(+1)
  2. SequencedChild需要有一个将cascade设置为none的显式地​​图
  3. 执行更新时,请勿覆盖SequencedChild列表。首先清除然后添加新项目。 (或者只是清除你是否没有更换物品)
  4. 无需Inverse()来电
  5. db表中的ParentId字段应该是可空的,因为nHibernate在删除它之前坚持将其更新为null。 (如果有人知道解决方法,请发表评论)

答案 1 :(得分:1)

尝试将级联更改为Cascade.AllDeleteOrphan()以删除SequencedChild表上的孤立子记录。