gpt4 book ai didi

c# - HasManyToMany Fluent NHibernate 映射删除错误

转载 作者:行者123 更新时间:2023-11-30 16:25:53 25 4
gpt4 key购买 nike

我一直在对一个我称为 Task 的实体进行多对多映射。一个任务可以有很多 child 和很多 parent 。中间有一个连接表,只有两个 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();

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

        _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);
}

关于c# - HasManyToMany Fluent NHibernate 映射删除错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9474368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com