我正在尝试使用实体框架从数据库中获取表。
该表引用了另一个表,该表再次引用了其他表。 我知道如何包含其他表格。根据{{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);
答案 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,您就可以把它包括进您的内心了:)或对我来说似乎如此