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

时间:2015-09-30 16:51:26

标签: c# entity-framework

型号:

    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();

如何正确地将新项加载到Parent的Children集合中,包括Grandchild对象?

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

1 个答案:

答案 0 :(得分:0)

我通常使用以下(无负载)

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

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

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