【发布时间】:2026-01-18 19:45:01
【问题描述】:
我在破坏两个实体之间的关系时遇到问题。假设我们有一个Child 实体属于一个Parent,一个Parent 有许多Child 实体。现在在我的前端,用户可以选择一个单选按钮来选择Parent 属于哪个Child,或者他们可以选择“无”。我遇到的问题是,当我编辑 Child 记录并选择“无”时,它似乎并没有破坏现有关系。
在我的业务逻辑中,我正在执行以下操作:
child.Parent = parentRepository.Find(command.ParentID);
如果没有记录与传入的 ID 匹配,则存储库方法返回 null,并且选择“无”给出的 ID 为 0,但当我调试并跨过这一行时,Child.Parent 仍然具有对先前选择的 Parent 实体的引用.事实上,甚至显式设置 Child.Parent = null;似乎没有断开链接。
为了增加我的困惑,这不是一致的行为。时不时地使用相同的代码确实破坏关系并将 Child.Parent 设置为 null!有人可以指出我正确的方向吗?
更新
我更新了我的代码以确保 repo 返回 null。
Parent parent = parentRepository.Find(command.ParentID);
if (parent == null)
child.parent = null;
else
child.parent = parent;
调试显示 child.parent = null; 行 is 正在执行,但是当我在此行之后检查 child.parent 时,它仍然显示对先前引用的 Parent 对象的引用。但时不时地,它被正确设置为空。此版本有效:
Parent parent = parentRepository.Find(command.ParentID);
if (parent == null)
{
child.parent = null;
child.parent = null;
}
else
child.parent = parent;
为什么我必须将其设置为 null 两次才能获得一致的行为?我是否必须以某种方式明确声明Parent 在Child 实体上可以为空?
【问题讨论】:
-
也粘贴子模型代码。如果您在 OnModelCreating 事件中执行任何流畅的 API 调用,请同时显示它们。
标签: c# asp.net-mvc entity-framework poco