首页 > 解决方案 > 实体框架:如何在不重新添加父级的情况下更新子级

问题描述

我有以下 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 包含许多 CategoryDe​​tail 元素。

每个父级包含许多子级,并且是特定类别的成员。

每个 Child 包含一个指向其 Parent 的指针以及一个指向特定 CategoryDe​​tail 元素的指针。

当我运行 CreateChild 方法时,Context 充满了对 Category 及其 CategoryDe​​tail 元素的添加引用。当 Context 尝试保存更改时,它会抱怨它已经有对这些项目的现有引用。

我可以在 Context.ChangeTracker 中看到,确实,元素不止一次处于添加状态。

我已经尝试了许多方案来确保不会发生这种情况,但还没有成功。我曾尝试手动将其他项目的状态更改为未更改等,但似乎找不到在不撞到一堵墙的情况下执行此操作的方法。

如何保持上下文“干净”?

标签: c#entity-frameworkdbcontextsavechanges

解决方案


推荐阅读