HasManyToMany Fluent NHibernate映射删除错误

我一直在研究一个名为Task的实体上的多对多映射。 任务可以有很多孩子和许多父母。 在它们之间有一个连接表,它只有两个FK列“ParentTaskId”和“ChildTaskId”。 这是我到目前为止所提出的。

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

这里有一些示例代码可以帮助我说明我的问题。 以下代码有效:

  _taskRepository.Save(_taskVendor); _taskRepository.Save(_taskClientVendor); _taskRepository.Save(_taskClient); _taskVendor.Children.Add(_taskClientVendor); _taskClientVendor.Children.Add(_taskClient); _taskRepository.Save(_taskVendor); _taskRepository.Save(_taskClientVendor); _taskRepository.Delete(_taskVendor); _taskRepository.Delete(_taskClientVendor); _taskRepository.Delete(_taskClient); 

但是,如果我将删除语句的顺序更改为:

  _taskRepository.Delete(_taskVendor); _taskRepository.Delete(_taskClient); _taskRepository.Delete(_taskClientVendor); 

我的多对多联接表中出现了fk约束违规。 我认为这与我在映射上设置逆向的方式有关。 它会影响执行查询的顺序,以避免出现这种精确的fk约束问题。 有没有办法映射这个,以便我可以删除任何一方,子或父,但没有此exception的实体? 我在映射的两边都尝试了反向,但这导致了我的多对多关系没有被保存。 > _ <

任何帮助将非常感激。

你必须手动删除它们

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