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