Entity Framework: как обновить детей без повторного добавления родителей - PullRequest
0 голосов
/ 02 октября 2019

У меня есть следующий псевдокод 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);
    }
}

Каждая категория содержит несколько элементов CategoryDetail.

Каждый родительский элемент содержит несколько дочерних элементов и является членом определенногоCategory.

Каждый дочерний элемент содержит указатель на своего родителя, а также указатель на конкретный элемент CategoryDetail.

Когда я запускаю метод CreateChild, в контекст добавляются дополнительные ссылки наКатегория и ее элементы CategoryDetail. Когда Context пытается сохранить изменения, он жалуется, что уже имеет существующую ссылку на эти элементы.

Я вижу в Context.ChangeTracker, что, действительно, элементы существуют более одного раза в добавленномсостояние.

Я попробовал любое количество схем, чтобы убедиться, что это не произойдет, но пока не удалось. Я пытался вручную изменить состояние других элементов на неизменное и т. Д., Но, похоже, не могу найти способ сделать это, не врезаясь в ту или иную стену.

Как мне сохранить контекст 'чистый "?

...