Софтуерно Инженерство
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 556 Точки
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 556 Точки

 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