Loading...
butoff avatar butoff 33 Точки

EF Core Извличне на данни от контекста

Примерна база Student System от Entity Framework Relations (04 упражнение)

Students -- StudentCources -- Cources

https://imgur.com/eP9yS4w Искам да взема всички студенти с техните курсове.

Получава ми се само с JOIN. А трябва да има и начин със SELECT и INSERT. 

           var context = new StudentSystemContext(); 
            var students = context.Students
                                  .Join(context.StudentCourses,
                                        s => s.StudentId,
                                        sc => sc.StudentId,
                                        (s, sc) => new
                                        {
                                            s.Name,
                                            s.PhoneNumber,
                                            sc.CourseId
                                        })
                                    .Join(context.Courses,
                                         sc => sc.CourseId,
                                         c => c.CourseId,
                                         (sc, c) => new
                                         {
                                             sc.Name,
                                             sc.PhoneNumber,
                                             Course = c.Name
                                         })
                                      .ToList();

Класовете са описани, връзките са описани, минава в Judge, има данни в базата и работи с JOIN.  Как да стане със SELECT и INSERT?

Тагове:
0
Databases Advanced - Entity Framework 15/11/2017 11:45:26
VasilValchanov avatar VasilValchanov 555 Точки
Best Answer

 var students = db.Students
                .Select(s => new
                {
                    s.Name,
                    Coureses = s.StudentCourses
                }).ToList();

0
butoff avatar butoff 33 Точки

Не работи примерът на VasilValchanov .  StudentCourses са CourseEnrollments и е колекция. Това са класовете:

    public class Student
    {
        public int StudentId { get; set; }
        public string Name { get; set; }
        public string PhoneNumber { get; set; }
        public DateTime RegisteredOn { get; set; }
        public DateTime? Birthday { get; set; }

        public ICollection<StudentCourse> CourseEnrollments { get; set; } = new List<StudentCourse>();
        public ICollection<Homework> HomeworkSubmissions { get; set; } = new List<Homework>();
    }
    public class Course
    {
        public int CourseId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public decimal Price { get; set; }

        public ICollection<StudentCourse> StudentsEnrolled { get; set; } = new List<StudentCourse>();
        public ICollection<Resource> Resources { get; set; } = new List<Resource>();
        public ICollection<Homework> HomeworkSubmissions { get; set; } = new List<Homework>();
    }
    public class StudentCourse
    {        
        public int StudentId { get; set; }
        public Student Student { get; set; }

        public int CourseId { get; set; }
        public Course Course { get; set; }
    }

Това е връзката:

            modelBuilder.Entity<StudentCourse>().HasKey(sc => new { sc.StudentId, sc.CourseId });
            modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Student).WithMany(s => s.CourseEnrollments);
            modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Course).WithMany(c => c.StudentsEnrolled);

 

0
VasilValchanov avatar VasilValchanov 555 Точки

 var students = db.Students
                .Select(s => new
                {
                    s.Name,
                    Coureses = s.CourseEnrollments 
                }).ToList();

CourseEnrollments тази колекция я инициализираш като List.

И във връзките не си посочил ForeignKey може да е проблем.

modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Student).WithMany(c => c.CourseEnrollments).HasForeignKey(sc => sc.StudentId);

modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Course).WithMany(c => c.StudentsEnrolled).HasForeignKey(sc => sc.CourseId);

0
15/11/2017 13:44:49
butoff avatar butoff 33 Точки

Благодаря за отделеното време! Бях пропуснал HasForeignKey, но не знам дали има значение за връзката между ентитата?

Отделно ми се бъгна Intellisense и сега разбрах, че не мога без него. Ей тази заявка измъдрих накрая:

            var students = context.Students
                                  .Select(s => new
                                                 {
                                                   StudentName = s.Name,
                                                   Courses = s.CourseEnrollments
                                                              .Select(sc => new
                                                                              {
                                                                                 sc.Course.Name
                                                                              })
                                                 })                                  
                                  .ToList();

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.