Entity Framework加载相关实体——Eager Loading
在前面两回我们分别分析了Lazy Loading和Explicit Loading,这一回我们来分析一下Eager Loading。
在某些情况下,我们可能事先知道要需要加载某些实体的相关实体,这时我们就可以用Include方法来在加载实体的查询语句中把相关实体也一并查询出来。下面我们还用前两回使用的数据库来写一个例子来分析一下Eager Loading:
View Code
1 using (var context = new TestEntities())
2 {
3 var players = from p in context.Players.Include("Team").Include("PlayerDetails") where (p.PlayerDetails.Any(d => d.Height > 200)) select p;
4 foreach (var v in players)
5 {
6 string output = string.Format("Team: {0} Player: {1}", v.Team.TeamName, v.PlayerName);
7 Console.WriteLine(output);
8 }
9 Console.Read();
10 }
以上代码,我们查询出了身高在2米以上的球员的名字和所在球队,在查询Player信息的同时,也查询了Team表和PlayerDetails表的信息,将三个表的信息全部加载了进来。这里我们需要注意,我们可以控制将哪些相关实体加载入内,但不能够对Include进来的实体进行筛选,如以下代码:
View Code
1 var teams = from t in context.Teams.Include("Players") where (t.TeamID == 1) select t;
我们可以选择加载哪些球队,却不能选择加载球队的哪些球员,该球队的所有球员都将被加载进来。
至此,Entity Framework加载相关实体的三种形式全部分析完毕!