У меня есть следующий псевдокод 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, что, действительно, элементы существуют более одного раза в добавленномсостояние.
Я попробовал любое количество схем, чтобы убедиться, что это не произойдет, но пока не удалось. Я пытался вручную изменить состояние других элементов на неизменное и т. Д., Но, похоже, не могу найти способ сделать это, не врезаясь в ту или иную стену.
Как мне сохранить контекст 'чистый "?