static void Main(string[] args) { List <SubjectsStudents> result; using (var context = new HighContext()) { #region заполнение таблиц //var mentor = new Mentor //{ // FullName = "Колтыкшашев Кайрат", // Stage = 13 //}; //var math = new Subject //{ // SubjectName = "Математика", // Mentor = mentor //}; //var english = new Subject //{ // SubjectName = "Английский язык", // Mentor = mentor //}; //var firstStudent = new Student //{ // FullName = "Скидан Олег Сергеевич", // GroupName = "SEP-182", //}; //var secondStudent = new Student //{ // FullName = "Сагадиев Ернар Габитович", // GroupName = "SEP-182", //}; //var firstSubjectStudent = new SubjectsStudents //{ // Subject = math, // Student = firstStudent, //}; //var secondSubjectStudent = new SubjectsStudents //{ // Subject = english, // Student = firstStudent, //}; //var thirdSubjectStudent = new SubjectsStudents //{ // Subject = math, // Student = secondStudent, //}; //var fourthSubjectStudent = new SubjectsStudents //{ // Subject = english, // Student = secondStudent, //}; //context.Add(mentor); //context.Add(firstStudent); //context.Add(secondStudent); //context.Add(math); //context.Add(english); //context.Add(firstSubjectStudent); //context.Add(secondSubjectStudent); //context.Add(thirdSubjectStudent); //context.Add(fourthSubjectStudent); #endregion // 3 типа загрузки: // Eager, Explicit, Lazy (жадная, явная, ленивая) // Жадная - помимо требуемой сущности скачивается все связи через Include (включить в) // Явная - скачивает явную конкретную зависимость для сущности (одну или набор) // Ленивая - заранее дает возможность в случае необходимости сделать доп запрос в рамках одного контекста //var result = context.SubjectsStudents.Include(x => x.Student).ToList(); // Жадная //var result = context.SubjectsStudents.Include(x => x.Student).Include(x => x.Subject).ToList(); // Жадная => загрузка студента и сабджекта //var result = context.SubjectsStudents.Include(x => x.Student).Include(x => x.Subject).ThenInclude(s => s.Mentor).ToList(); // Жадная => получение элементов каждого студента/сабджекта //var result = context.SubjectsStudents.ToList(); // Явная, первый запрос //context.Entry(result.FirstOrDefault()).Reference(x => x.Student).Load(); // это Второй запрос //foreach(var res in result) //{ // Console.WriteLine($"Name: {res.Student.FullName}"); //} result = context.SubjectsStudents.ToList(); // Ленивая Console.WriteLine(result.FirstOrDefault().Student.FullName); // Иожно получить значения в текущем контексте } }
static void Main(string[] args) { var result = new List <SubjectsStudents>(); using (var context = new HighContext()) { /*var mentor = new Mentor * { * FullName = "Смирнов Иван", * Stage = 13 * }; * var math = new Subject * { * Name = "Математика", * Mentor = mentor * }; * var english = new Subject * { * Name = "Английский язык", * Mentor = mentor * }; * * * var firstStudent = new Student * { * FullName = "Чёрный Александр", * GroupName = "103A" * }; * * var secondStudent = new Student * { * FullName = "Крутая Екатерина", * GroupName = "103A" * }; * * var firstSubjectStudent = new SubjectsStudents * { * Subject = math, * Student = firstStudent * }; * var secondSubjectStudent = new SubjectsStudents * { * Subject = math, * Student = secondStudent * }; * var thirdSubjectStudent = new SubjectsStudents * { * Subject = english, * Student = firstStudent * }; * var fourthSubjectStudent = new SubjectsStudents * { * Subject = english, * Student = secondStudent * }; * * //context.Add(mentor); * //context.Add(firstStudent); * //context.Add(secondStudent); * //context.Add(math); * //context.Add(english); * context.Add(firstSubjectStudent); * context.Add(secondStudent); * context.Add(thirdSubjectStudent); * context.Add(fourthSubjectStudent); * context.SaveChanges();*/ /* Три типа загрузки: * Eager, Explicit, Lazy * Жадная скачивает все связи через Include, а не только конкретную сущность * Явная скачивает только конкретную сущность * Ленивая может заранее сделать дополнительный запрос в одном контексте */ // Жадная: НЕ используй, когда не нужно всё подряд // Это ОДИН запрос //var result = context.SubjectsStudents // .Include(subjectStudent => subjectStudent.Student) // .Include(subjectStudent => subjectStudent.Subject) // .ThenInclude(subject => subject.Mentor) // .ToList(); //// Явная //var result = context.SubjectsStudents.ToList(); //// Это ВТОРОЙ запрос, нельзя делать вне using //context.Entry(result.FirstOrDefault()) // .Reference(x => x.Student) // .Load(); // Ленивая нельзя достучатся до объектов вне контекста result = context.SubjectsStudents.ToList(); Console.WriteLine(result.FirstOrDefault().Student.FullName); } // Здесь НЕ работает //Console.WriteLine(result.FirstOrDefault().Student.FullName); }