Когда вы отключили отложенную загрузку, все еще можно загружать связанные объекты, но это должно быть сделано с явным вызовом.
-
В отличие от отложенной загрузки, нет никакой двусмысленности или возможности путаницы относительно того, когда выполняется запрос.
-
Для этого вы используете метод Load в записи связанной сущности.
-
Для отношения один ко многим вызовите метод Load в Collection.
-
А для отношения один-к-одному вызовите метод Load для Reference.
В отличие от отложенной загрузки, нет никакой двусмысленности или возможности путаницы относительно того, когда выполняется запрос.
Для этого вы используете метод Load в записи связанной сущности.
Для отношения один ко многим вызовите метод Load в Collection.
А для отношения один-к-одному вызовите метод Load для Reference.
Давайте рассмотрим следующий пример, в котором отключена отложенная загрузка, а затем извлекается ученик по имени Али.
Затем информация о студентах записывается на консоли. Если вы посмотрите на код, информация о регистрации также записывается, но объект Enrollments еще не загружен, поэтому цикл foreach не будет выполнен.
После этого объект Enrollments загружается явно, теперь информация о студентах и информация о регистрации будут записываться в окне консоли.
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { context.Configuration.LazyLoadingEnabled = false; var student = (from s in context.Students where s.FirstMidName == "Ali" select s).FirstOrDefault<Student>(); string name = student.FirstMidName + " " + student.LastName; Console.WriteLine("ID: {0}, Name: {1}", student.ID, name); foreach (var enrollment in student.Enrollments) { Console.WriteLine("Enrollment ID: {0}, Course ID: {1}", enrollment.EnrollmentID, enrollment.CourseID); } Console.WriteLine(); Console.WriteLine("Explicitly loaded Enrollments"); Console.WriteLine(); context.Entry(student).Collection(s ⇒ s.Enrollments).Load(); Console.WriteLine("ID: {0}, Name: {1}", student.ID, name); foreach (var enrollment in student.Enrollments) { Console.WriteLine("Enrollment ID: {0}, Course ID: {1}", enrollment.EnrollmentID, enrollment.CourseID); } Console.ReadKey(); } } }
Когда приведенный выше пример будет выполнен, вы получите следующий вывод. Сначала отображается только информация об ученике, а после явной загрузки сущности зачислений отображается информация об ученике и связанных с ним зачислениях.
ID: 1, Name: Ali Alexander Explicitly loaded Enrollments ID: 1, Name: Ali Alexander Enrollment ID: 1, Course ID: 1050 Enrollment ID: 2, Course ID: 4022 Enrollment ID: 3, Course ID: 4041
Мы рекомендуем вам выполнить вышеприведенный пример пошагово для лучшего понимания.