Entity Framework извлекает объекты, основываясь на условии - PullRequest
0 голосов
/ 30 января 2019

Я разрабатываю приложение Web Api с использованием Entity Framework, где у меня есть эти две модели и мой класс DbContext:

public class Course
{
    [Key]
    public int CourseId { get; set; } 

    [Required]
    public string CourseName{ get; set; }

    public ICollection<Students> Students { get; set; }        

}

public class Students
{
    [Key]
    public int StudentId { get; set; } 

    [Required]
    public string StudentName{ get; set; }

    [Required]
    public int StudentAge{ get; set; }

}

//My CourseContext
public class CourseContext : DbContext
{
    public CourseContext () : base("CourseDB") { }

    public DbSet<Course> Courses { get; set; }

    public DbSet<Students> Students { get; set; }
}

Я моделирую WebAPi с этими моделями выше, и мне нужно перечислить всех студентов, которыепроходят курс, что означает, что они добавляются к свойству ICollection Студенты в классе курса.Я пытался разработать решение для этого, но я понятия не имею, как это сделать, так как у меня нет свойства внешнего ключа между моделями.

...
using (var course_db = new CourseContext ()){


/*but this return all students and repeated ones since one student 
can be in more than one course*/

var students= course_db.Course.Include("Students").Select(x=> x.Students);

if (students== null){
   return Json(new { success = false });
}

return Json(students, JsonRequestBehavior.AllowGet);
}
...

Я пробовал приведенный ниже код, но это не такРабота.Я просто хочу найти студентов, которые записаны на курс, так как некоторые из них нет.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 30 января 2019

Вам необходимо и дальше строить отношения в вашей модели.Отношение «студент-курс» должно быть отношением «многие-ко-многим», в котором вам не хватает подходящих свойств в каждой, а также объединяющей таблицы и соответствующей конфигурации построителя модели (контекста).

Переопределите метод создания модели dbcontext, чтобыдобавьте свою свободную конфигурацию:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Build many-to-many relationships
        modelBuilder.Entity<Student>()
                      .HasMany<Course>(c => c.Courses)
                      .WithMany(s => s.Student)
                      .Map(pe =>
                      {
                          pe.MapLeftKey("Student_ID");
                          pe.MapRightKey("Course_ID");
                          pe.ToTable("StudentCoursesTable");
                      });
    }

Добавьте недостающие курсы из вашего класса ученика:

    public class Students
    {
        public ICollection<Courses> Courses { get; set; } 
    }
...