对添加新项目后丢失的对象的引用

本文关键字:对象 引用 添加 新项目 | 更新日期: 2023-09-27 18:30:41

我有一个看起来像这样的模型:

public class Parent
{
    public string Name { get; set; }
    public List<Child> Children { get; set; }
}
public class Child
{
    public string Name { get; set; }
    public Parent Parent { get; set; }
    public Child ParentChild { get; set; }
    public List<Child> Children { get; set; }
}

这意味着我有一个可以生孩子的父母。孩子也可以生孩子。每个子项都有一个对它所属的父项的引用(即使它是子项的子项)。

我的数据库中有以下内容:

父母

  • Child_1
    • Child_1_1
      • Child_1_1_1

我现在想补充Child_1_2。

var child = new Child(){ Name = "Child 1.2" };
child.ParentChild = child_1;
child.Parent = parent;
context.Children.Add(child);
context.SaveChanges();

我的问题是,这将改变Child_1_1和Child_1_1_1。在此代码之后,对其父级的引用将丢失。它们在数据库中将为空。这与实体框架未加载所有引用(尤其是嵌套的引用)有关。

有没有办法执行此操作并告诉实体框架添加父级但不更改父级或其任何子级?

对添加新项目后丢失的对象的引用

我的猜测是你在这里没有显示确切的模型。您的模型意味着两个不同的表。

快速解决方法是添加parent.Children.Add(child)

尽管

我强烈建议您将模型重做为类似的东西(尽管在更大的contex中仍然没有意义):

public class Person
{
   public string Name { get; set; }
   public List<Child> Children { get; set; }
}
public class Parent : Person
{
   // Probably this class would contain something useful
}
public class Child : Person
{
    public Person ParentPerson { get; set; }
}