实体框架:如何在不重新添加父母的情况下更新孩子

时间:2019-10-02 04:20:44

标签: c# entity-framework dbcontext savechanges

我有以下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);
    }
}

每个类别都包含许多CategoryDe​​tail元素。

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

每个子对象都包含一个指向其父对象的指针,以及一个指向特定CategoryDe​​tail元素的指针。

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

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

我尝试了多种方案以确保不会发生这种情况,但尚未成功。我曾尝试将其他项目的状态手动更改为未更改等,但似乎找不到不碰到一堵墙或另一堵墙的方法。

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

0 个答案:

没有答案