C# HasManyToMany Fluent NHibernate映射删除错误
我一直在一个叫做Task的实体上进行多对多映射。一项任务可以有很多孩子和父母。中间有一个联接表,其中只有两个FK列“ParentTaskId”和“ChildTaskId”。以下是我到目前为止的想法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(
// 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);
}