在以下Entity framework official example中。
Students
的初始化仅存在于Course
的构造函数中(this.Students = new HashSet<Student>();
)?为什么不在Student
的构造函数中? List<...>
,程序运行正常。 (是因为我使用了List<...>
而不是ICollection<...>
?码
public class Student
{
public Student() { }
public int StudentId { get; set; }
[Required]
public string StudentName { get; set; }
public int StdandardId { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
public class Course
{
public Course()
{
this.Students = new HashSet<Student>();
}
public int CourseId { get; set; }
public string CourseName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
答案 0 :(得分:2)
virtual
并且将根据需要进行延迟加载。但是,如果他们尝试在Students
集合中插入新项目,则此初始化很重要 - 因为它会阻止NullReferenceException
ICollection
而不是List
- 在99%的情况下ICollection
合同就足够了,使用界面而不是类让你的设计更加灵活(例如你可以使用HashSet而不是List)