c# - 实体框架:如何在不重新添加父级的情况下更新子级
问题描述
我有以下 C# 伪代码:
public void TestFunc(int ParentId)
{
using DBContext Context = new DBContext();
Parent X = Context.Parents.Find(ParentId);
X.CreateChild();
Context.SaveChanges();
}
public class CategoryDetail
{
public int Id;
public Category ParentCategory {get; set;}
}
public class Category
{
public int Id;
public List<CategoryDetail> CategoryDetails {get; set;}
}
public class Child
{
public int Id;
public CategoryDetail ThisCategoryDetail {get; set;}
public Parent ThisParent {get; set;}
}
public class Parent
{
public int Id;
public Category ThisCategory {get; set;}
public List<Child> Children {get; set;}
public CreateChild()
{
Child NewChild = new Child();
NewChild.ThisCategoryDetail = ThisCategory.CategoryDetails[0];
NewChild.ThisParent = this;
Children.Add(NewChild);
}
}
每个 Category 包含许多 CategoryDetail 元素。
每个父级包含许多子级,并且是特定类别的成员。
每个 Child 包含一个指向其 Parent 的指针以及一个指向特定 CategoryDetail 元素的指针。
当我运行 CreateChild 方法时,Context 充满了对 Category 及其 CategoryDetail 元素的添加引用。当 Context 尝试保存更改时,它会抱怨它已经有对这些项目的现有引用。
我可以在 Context.ChangeTracker 中看到,确实,元素不止一次处于添加状态。
我已经尝试了许多方案来确保不会发生这种情况,但还没有成功。我曾尝试手动将其他项目的状态更改为未更改等,但似乎找不到在不撞到一堵墙的情况下执行此操作的方法。
如何保持上下文“干净”?
解决方案
推荐阅读
- python - 用字典中的值替换列表中的单词
- javascript - 如何在 Vuejs 中添加检查电子邮件和密码字段数据的方法?
- python - 尝试输入是 int 还是特定字符串
- java - 如何使用 spark 和 java 将 xml 转换/解析为平面表
- javascript - 如何在反应中只为特定页面应用脚本标签?
- javascript - Dcrypt 并根据 JS 中提供的值构造所有可能的单词
- timer - Pycharm 在一秒后执行
- python - 文件目录中多个视频的帧提取
- javascript - 如何在 vanilla JS whack-a-mole 的随机网格子项中显示随机图像
- flutter - 颤振显示日期选择器与按键