Entity Framework 根据条件检索对象

Entity Framework retrieve objects based in condition

我正在使用 Entity Framework 开发 Web Api 应用程序,其中我有这两个模型和我的 DbContext class:

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 进行建模,我需要列出所有正在上课的学生,这意味着他们将被添加到课程 Class 中的 ICollection Students 属性 中。我试图为此开发一个解决方案,但我不知道该怎么做,因为我在模型之间没有外键 属性。

...
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);
}
...

我试过下面的代码,但没有用。我只想检索已注册课程的学生,因为其中一些不是。有人可以帮助我吗?

您需要在模型中进一步建立关系。学生与课程的关系应该是多对多关系,您在每个关系中都缺少适当的属性,但也缺少连接 table 和适当的模型构建器(上下文)配置。

覆盖您的 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");
                      });
    }

添加学生缺少的课程class:

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