使用NHibernate删除一对多关系中的子对象时遇到问题

使用NHibernate删除一对多关系中的子对象时遇到问题,nhibernate,nhibernate-mapping,one-to-many,Nhibernate,Nhibernate Mapping,One To Many,这个标题大致概括了我所面临的问题。基本上我有两门课: public class Parent : IIntegerIdentifiable { public virtual long Id { get; set; } public virtual ICollection<Child> Children {get; set; } } public class Child : IIntegerIdentifiable { public virtual long Id

这个标题大致概括了我所面临的问题。基本上我有两门课:

public class Parent : IIntegerIdentifiable
{
   public virtual long Id { get; set; }
   public virtual ICollection<Child> Children {get; set; }
}

public class Child : IIntegerIdentifiable
{
    public virtual long Id { get; set; }
    public virtual Parent Parent { get; set; }
}
我们的代码设置为在请求结束时调用flush。每当我尝试执行代码时,都会出现以下错误:

无法在“test.dbo.Child”表的“parent_id”列中插入值NULL;列不允许空值。更新失败

我还尝试先删除每个子实体,刷新会话,然后更新父集合。它给出了同样的错误。问题是 a) 为什么nHibernate试图将父id列更新为null,然后删除? b) 我该怎么做才能使删除工作正常

为了让你知道我不是在浪费你的时间,我引用了其他关于这个主题的帖子,比如
-
-

但似乎什么都不管用。有人能给我指一下正确的方向吗?谢谢你的帮助

我认为这与Cascade选项有关,尝试将Cascade更改为All\u Delete\u Orphan From Cascade.All


很抱歉这么晚才发布。由于子映射中的“Cascade.All()”而发生问题。因此,当删除/删除子项时,会触发父集合的保存,从而导致此错误。谢谢你的帮助!!
public sealed class ParentMap : ClassMap<Parent>
{
    public ParentMap()
    {
        Id(x => x.Id).GeneratedBy.HiLo(
            "HiLoUniqueKey", "NextHi", "99", "ObjectType = 'Parent'"); 

        HasMany(x => x.Children).KeyColumn("Parent_Id").Inverse().Cascade.AllDeleteOrphan();
    }
}

public sealed class ChildMap : ClassMap<Child>
{
    public ChildMap()
    {
        Id(x => x.Id).GeneratedBy.HiLo("HiLoUniqueKey", "NextHi", "99", "ObjectType = 'Child'");
        References(x => x.Event).Cascade.All();
    }
}
    public void ClearChildEntries(long parentId)
    {
        //I had tried the following and was getting errors before I read the other posts on the topic
        //QueryOver().Where(x => x.Event.Id == eventId).List().ToList().ForEach(Remove);
        //Session.flush()

       //Current code
        var parent = _parentRepository.GetById(parentId);
        parent.Children.Clear();

        _parentRepository.SaveOrUpdate(parent);
    }