【问题标题】:Reference to objects lost afer adding a new item引用添加新项目后丢失的对象
【发布时间】:2016-01-15 13:16:32
【问题描述】:

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

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; }
}

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

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

父母

  • 孩子_1
    • 孩子_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。在本准则之后,对其父母的引用将丢失。它们在数据库中将为空。 这与实体框架未加载所有引用(尤其是嵌套的引用)有关。

有没有办法做到这一点并告诉实体框架添加父级但不更改父级或其任何子级?

【问题讨论】:

  • 您如何检索 child_1?
  • 我检索 child_1 类似于: context.Children.Where(c => c.Name == "Child 1").FirstOrDefault();但这并没有添加所有的引用。
  • 请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该”!

标签: c# entity-framework


【解决方案1】:

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

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

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

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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多