C# HasManyToMany Fluent NHibernate映射删除错误

C# HasManyToMany Fluent NHibernate映射删除错误,c#,nhibernate,fluent-nhibernate,many-to-many,C#,Nhibernate,Fluent Nhibernate,Many To Many,我一直在一个叫做Task的实体上进行多对多映射。一项任务可以有很多孩子和父母。中间有一个联接表,其中只有两个FK列“ParentTaskId”和“ChildTaskId”。以下是我到目前为止的想法 // Many-to-Many Parents HasManyToMany<Task>(x => x.Parents) .Table("TaskDependency") .ParentKeyColumn(

我一直在一个叫做Task的实体上进行多对多映射。一项任务可以有很多孩子和父母。中间有一个联接表,其中只有两个FK列“ParentTaskId”和“ChildTaskId”。以下是我到目前为止的想法

        // Many-to-Many Parents
        HasManyToMany<Task>(x => x.Parents)
            .Table("TaskDependency")
            .ParentKeyColumn("ParentTaskId")
            .ChildKeyColumn("ChildTaskId")
            .Inverse()
            .Not.LazyLoad()
            .Cascade.SaveUpdate();

        // Many-to-Many Children
        HasManyToMany<Task>(x => x.Children)
            .Table("TaskDependency")
            .ParentKeyColumn("ChildTaskId")
            .ChildKeyColumn("ParentTaskId")
            .Not.LazyLoad()
            .Cascade.SaveUpdate();
但如果我将delete语句的顺序更改为:

        _taskRepository.Delete(_taskVendor);
        _taskRepository.Delete(_taskClient);
        _taskRepository.Delete(_taskClientVendor);
我的多对多联接表中出现fk约束冲突。我认为这与我在映射上设置逆的方式有关。它影响查询的执行顺序,以避免这个确切的fk约束问题。是否有任何方法可以映射这一点,以便我可以删除任意一侧的实体,无论是子实体还是父实体,而不会出现此异常?我尝试在映射的两侧反向,但这只会导致我的多对多关系无法保存


任何帮助都将不胜感激。

您必须手动删除它们

void Delete(Task task)
{
    foreach (var parent in task.Parents)
    {
        parent.Childs.Remove(task);
    }
    session.Delete(task);
}

啊!当然……:)谢谢你的帮助。不过,出于好奇,这个映射看起来正确吗(除了将逆映射移到映射的另一边)?下面是我最终得出的结论:public override void Delete(Task Task){Task parentTask;foreach(Task.Parents中的var parent){//在删除子项之前,需要确保删除所有父项关系。parentTask=this.Fetch(parent.Id);parentTask.Children.remove(task);Save(parentTask);}//此行最终调用session.Delete(task)base.Delete(task); }
void Delete(Task task)
{
    foreach (var parent in task.Parents)
    {
        parent.Childs.Remove(task);
    }
    session.Delete(task);
}