贪婪加载是指查询一个类型实体的时候同时查询与实体关联的类型
通过Include()方法实现
using (var context = new SchoolDBEntities()) { var stud1 = (from s in context.Students.Include("Standard") where s.StudentName == "Student1" select s).FirstOrDefault<Student>(); }
using (var ctx = new SchoolDBEntities()) { var stud1 = ctx.Students.Include("Standard") .Where(s => s.StudentName == "Student1").FirstOrDefault<Student>(); }
SELECT TOP (1) [Extent1].[StudentID] AS [StudentID], [Extent1].[StudentName] AS [StudentName], [Extent2].[StandardId] AS [StandardId], [Extent2].[StandardName] AS [StandardName], [Extent2].[Description] AS [Description] FROM [dbo].[Student] AS [Extent1] LEFT OUTER JOIN [dbo].[Standard] AS [Extent2] ON [Extent1].[StandardId] = [Extent2].[StandardId] WHERE 'Student1' = [Extent1].[StudentName]
using System; using System.Data.Entity; class Program { static void Main(string[] args) { using (var ctx = new SchoolDBEntities()) { var stud1 = ctx.Students.Include(s => s.Standard) .Where(s => s.StudentName == "Student1") .FirstOrDefault<Student>(); } } }
SELECT TOP (1) [Extent1].[StudentID] AS [StudentID], [Extent1].[StudentName] AS [StudentName], [Extent2].[StandardId] AS [StandardId], [Extent2].[StandardName] AS [StandardName], [Extent2].[Description] AS [Description] FROM [dbo].[Student] AS [Extent1] LEFT OUTER JOIN [dbo].[Standard] AS [Extent2] ON [Extent1].[StandardId] = [Extent2].[StandardId] WHERE 'Student1' = [Extent1].[StudentName]
Load multiple levels of related entities:
using (var ctx = new SchoolDBEntities()) { var stud1 = ctx.Students.Include("Standard.Teachers") .Where(s => s.StudentName == "Student1") .FirstOrDefault<Student>(); }
using (var ctx = new SchoolDBEntities()) { var stud1 = ctx.Students.Include(s => s.Standard.Teachers) .Where(s => s.StudentName == "Student1") .FirstOrDefault<Student>(); }
SELECT [Project2].[StudentID] AS [StudentID], [Project2].[StudentName] AS [StudentName], [Project2].[StandardId] AS [StandardId], [Project2].[StandardName] AS [StandardName], [Project2].[Description] AS [Description], [Project2].[C1] AS [C1], [Project2].[TeacherId] AS [TeacherId], [Project2].[TeacherName] AS [TeacherName], [Project2].[StandardId1] AS [StandardId1] FROM ( SELECT [Limit1].[StudentID] AS [StudentID], [Limit1].[StudentName] AS [StudentName], [Limit1].[StandardId1] AS [StandardId], [Limit1].[StandardName] AS [StandardName], [Limit1].[Description] AS [Description], [Project1].[TeacherId] AS [TeacherId], [Project1].[TeacherName] AS [TeacherName], [Project1].[StandardId] AS [StandardId1], CASE WHEN ([Project1].[TeacherId] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1] FROM (SELECT TOP (1) [Extent1].[StudentID] AS [StudentID], [Extent1].[StudentName] AS [StudentName], [Extent1].[StandardId] AS [StandardId2], [Extent2].[StandardId] AS [StandardId1], [Extent2].[StandardName] AS [StandardName], [Extent2].[Description] AS [Description] FROM [dbo].[Student] AS [Extent1] LEFT OUTER JOIN [dbo].[Standard] AS [Extent2] ON [Extent1].[StandardId] = [Extent2].[StandardId] WHERE 'updated student' = [Extent1].[StudentName] ) AS [Limit1] LEFT OUTER JOIN (SELECT [Extent3].[TeacherId] AS [TeacherId], [Extent3].[TeacherName] AS [TeacherName], [Extent3].[StandardId] AS [StandardId] FROM [dbo].[Teacher] AS [Extent3] WHERE [Extent3].[StandardId] IS NOT NULL ) AS [Project1] ON [Limit1].[StandardId2] = [Project1].[StandardId] ) AS [Project2] ORDER BY [Project2].[StudentID] ASC, [Project2].[StandardId] ASC, [Project2].[C1] ASC