.net 实体框架5中相关实体集合的问题

.net 实体框架5中相关实体集合的问题,.net,entity-framework,.net,Entity Framework,我的项目中有以下四个实体 学生 public int StudentID { get; set; } public string StudentName { get; set; } public int StandardId { get; set; } public virtual Standard Standard { get; set; } public virtual StudentAddress StudentAddress { get; set; } public virtual I

我的项目中有以下四个实体

学生

public int StudentID { get; set; }
public string StudentName { get; set; }
public int StandardId { get; set; }

public virtual Standard Standard { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
public virtual ICollection<Course> Courses { get; set; }
public int StudentID{get;set;}
公共字符串StudentName{get;set;}
公共int标准ID{get;set;}
公共虚拟标准{get;set;}
公共虚拟学生地址学生地址{get;set;}
公共虚拟ICollection课程{get;set;}
老师

public int TeacherId { get; set; }
public string TeacherName { get; set; }
public Nullable<int> StandardId { get; set; }

public virtual ICollection<Course> Courses { get; set; }
public virtual Standard Standard { get; set; }
public int-TeacherId{get;set;}
公共字符串教学器名称{get;set;}
公共可为空的StandardId{get;set;}
公共虚拟ICollection课程{get;set;}
公共虚拟标准{get;set;}
标准

public int StandardId { get; set; }
public string StandardName { get; set; }
public string Description { get; set; }

public virtual ICollection<Student> Students { get; set; }
public virtual ICollection<Teacher> Teachers { get; set; }
public int-StandardId{get;set;}
公共字符串StandardName{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection学生{get;set;}
公共虚拟ICollection教师{get;set;}
课程

public int CourseId { get; set; }
public string CourseName { get; set; }
public string Location { get; set; }
public int TeacherId { get; set; }

public virtual Teacher Teacher { get; set; }
public virtual ICollection<Student> Students { get; set; }
public int-CourseId{get;set;}
公共字符串CourseName{get;set;}
公共字符串位置{get;set;}
public int TeacherId{get;set;}
公共虚拟教师{get;set;}
公共虚拟ICollection学生{get;set;}
如果我试图直接从学生实体访问课程列表,我总是得到零课程数

   using (SchoolDBEntities db = new SchoolDBEntities())
    {
        var query = (from s in db.Students
                     select s).FirstOrDefault<Student>();

        foreach (var item in query.Courses)
        {
                Console.WriteLine(item.CourseName);                    
        }
        Console.ReadLine();
    }
使用(SchoolDBEntities db=newschooldbEntities())
{
var query=(来自数据库中的s.Students)
选择s).FirstOrDefault();
foreach(query.Courses中的var项)
{
控制台写入线(项目CourseName);
}
Console.ReadLine();
}
但是,如果我像下面这样访问课程列表,我会正确地获取数据,第一种方法的问题是什么?我遗漏了什么吗?我希望下面的方法不是访问数据的有效方法

    using (SchoolDBEntities db = new SchoolDBEntities())
    {
        var query =   (from s in db.Students                               
                         select s).FirstOrDefault<Student>();

        foreach (var item in query.Standard.Teachers)
        {
            foreach (var crs in item.Courses)
            {
                Console.WriteLine(crs.CourseName);
            }
        }                
        Console.ReadLine();
    }
使用(SchoolDBEntities db=newschooldbEntities())
{
var query=(来自数据库中的s.Students)
选择s).FirstOrDefault();
foreach(query.Standard.Teachers中的var项)
{
foreach(项目课程中的var crs)
{
控制台写入线(crs.CourseName);
}
}                
Console.ReadLine();
}

我不确定您的关系是否太清晰,标准部分令人困惑,您能否详细说明您试图实现的关系?稍后我需要仔细查看,但我建议您必须在查询中使用include语句。SchooldEntities为学生查询,不加载任何教师实体。您是否100%确定您的学生有课程?执行SQL查询以确保数据存在。愚蠢的问题,但不得不问。。。