我有两个使用virtual关键字连接的类:
学生:
public class Student
{
public int StudentId{get; set;}
public string LastName { get; set; }
public string FirstName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual IEnumerable<Enrollment> Enrollments { get; set; }
}
注册:
public class Enrollment
{
public int EnrollmentId { get; set; }
public int CourseId { get; set; }
public int StudentId { get; set; }
public decimal? Grade { get; set; }
public virtual Course course { get; set; }
public virtual Student student { get; set; }
}
两个表都已填充,并且具有相应的记录(例如,有一个id为1的学生和一个id为1的学生的注册)。
我通过它的身份提取学生并将其发送到视图
Student student = db.Students.Find(id);
return View(student);
在视图中,我可以显示该学生的详细信息。 @Model
确实包含Enrollment
属性(至少它出现在intellisense中并且没有红线),但它是Null
。
还有一门课程:
{
public int CourseId { get; set; }
public String CourseName { get; set; }
public int TotalCredits { get; set; }
}
由于@Model.Enrollments
为Null
,我无法访问@Model.Enrollment.CourseNamae
。
修改 我刚尝试了一个黑客解决方法:
IEnumerable<Student> temp = db.Students.Include(s => s.Enrollments);
Student student = temp.FirstOrDefault(s => s.StudentId.Equals(id));
return View(student);
这给了我第二行的错误:
System.InvalidOperationException:指定的包含路径无效。 EntityType&#39; MyFirstProject2.Models.Student&#39;不会声明名称为&#39; Enrollments&#39;。
的导航属性
这是否提供了任何线索?
答案 0 :(得分:1)
有点晚了,但Lazy Loading vs Eager Loading
之间有一些解释以及延迟加载的规则:
修改强>: 关系使用的最后一件事:
public virtual ICollection<Enrollment> Enrollments { get; set; }
其他链接: