正在子集合EF中加载孙对象

本文关键字:对象 孙对象 加载 子集合 EF | 更新日期: 2023-09-27 18:15:25

型号:

    public class Parent
    {
        public int Id { get; set; }
        public ICollection<Child> Children { get; set; }
    }
    public class Child
    {
        public int Id { get; set; }
        public int IdGrandChild { get; set; }
        public virtual Grandchild Grandchild { get; set; }
    }
    public class Grandchild
    {
        public int Id { get; set; }
    }

我有一个带有Children集合的现有Parent实体。在一些操作之后,我想从像这样的数据库将新添加的子对象加载到Parent的集合

_context.Entry(parent).Collection(f => f.Children).Load();

但是当我这样做的时候,每个新添加的集合元素中的Grandchild对象都是null。我也尝试以这种方式包含孙,但孙对象仍然为空。

_context.Entry(parent).Collection(f => f.Children).Query().Include(c => c.Grandchild).Load();

如何将新项目正确加载到"父项"的"子项"集合中,包括"孙项"对象?

编辑:我不知道为什么这个问题被标记为重复?我的问题是:我已经在一个上下文实例(表单(中有了现有的(加载/跟踪的(父实体,然后在另一个上下文示例(表单(我修改了实体子实体的集合(添加或删除子实体(。最后,我想使用之前编写的方法之一将这些新添加的条目加载到第一个上下文实例中的父实体集合中,但之后会加载新添加的对象,但它们的孙对象为null。我不知道如何在不获得null的情况下将这些新的子对象正确加载到现有的(跟踪的(父实体中。

正在子集合EF中加载孙对象

我通常使用以下(wihout-load(

Parent parent = _context.Parent.Include(p => p.Children.Grandchild).FirstOrDefault();

如果我的孙子是一个收藏品,我会使用

Parent parent = _context.Parent.Include(p => p.Children.Select(c => c.Grandchild).FirstOrDefault();