HasManyToMany Fluent NHibernate映射删除错误
本文关键字:删除 错误 映射 NHibernate Fluent HasManyToMany | 更新日期: 2023-09-27 18:26:02
我一直在为一个名为Task的实体进行多对多映射。一项任务可能有许多孩子和许多父母。中间有一个联接表,只有两个FK列"ParentTaskId"answers"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();
这里有一些示例代码来帮助我说明我的问题。以下代码有效:
_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约束问题。有没有任何方法可以映射它,这样我就可以删除任何一侧的实体,子实体或父实体,而不会出现此异常?我在映射的两侧都尝试了反向,但这只会导致我的多对多关系没有得到保存。>_<
任何帮助都将不胜感激。
您必须手动删除它们
void Delete(Task task)
{
foreach (var parent in task.Parents)
{
parent.Childs.Remove(task);
}
session.Delete(task);
}