entity framework – 包含多个级别属性

我试图使用entity framework从数据库中获取一个表。

该表引用了另一个表,该表再次引用了其他表。 我知道如何包含其他表格。 并根据这个答案和这个MSDN页面包括多个级别是这样的:

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

添加另一个Include电话:

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

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

您可以进行多个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; } }