Ejemplo n.º 1
0
        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); // Иожно получить значения в текущем контексте
            }
        }
Ejemplo n.º 2
0
        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);
        }