实体框架 - 包含多个级别属性

时间:2016-02-26 15:20:25

标签: c# entity-framework

我正在尝试使用实体框架从数据库中获取表。

该表引用了另一个表,该表再次引用了其他表。 我知道如何包含其他表格。根据{{​​3}}回答,此this包含多个级别,如下所示:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3));

但我的问题是,如何在第3级包含另一张表?

这似乎不起作用:

entity.TableLevel1
          .Include(tLvl1=>tLvl1.TableLevel2
               .Select(tLvl2=>tLvl2.TableLevel3)
               .Select(tLvl2 => tLvl2.AnotherTableLevel3);

3 个答案:

答案 0 :(得分:18)

添加另一个Include电话:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3))
                  .Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.AnotherTableLevel3));

如果您要加载处于同一级别的相关实体,则应为每个实体调用Include扩展方法。

答案 1 :(得分:6)

您可以进行多次Include()来电:

entity.TableLevel1.Include(t1 => t1.TableLevel2);
entity.TableLevel1.Include(t1 => t1.TableLevel2.Select(t2 => t2.TableLevel3));
entity.TableLevel1.Include(t1 => t1.TableLevel2.Select(t2 => t2.AnotherTableLevel3));

entity.TableLevel1.Include("TableLevel2");
entity.TableLevel1.Include("TableLevel2.TableLevel3");
entity.TableLevel1.Include("TableLevel2.AnotherTableLevel3");

但是您可以将导航属性标记为virtual并且会延迟加载,因此您无需进行Include()调用:

class TableLevel1
{
    public virtual TableLevel2 TableLevel2 { get; set; }
}

class TableLevel2
{
    public virtual TableLevel3 TableLevel3 { get; set; }

    public virtual TableLevel3 AnotherTableLevel3 { get; set; }
}

答案 2 :(得分:1)

使用EF 6.2(不是核心)使我头痛了几个小时,却发现它无法正常工作的原因...

.Include(“ InspectionResultsByPerspective”) .Include(“ InspectionResultsByPerspective.InspectionResults”) .Include(“ InspectionResultsByPerspective.InspectionResults.PreparationTasksResults”)

是因为类型PreparationTasksResults没有默认ctor !!!啊!

给它一个默认的ctor,您就可以把它包括进您的内心了:)或对我来说似乎如此