我试图在EF Code-first中实现多对多。我找到了这段代码:
public class Student
{
public Student() { }
public int StudentId { get; set; }
[Required]
public string StudentName { 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; }
}
我理解除了以外的一切:
public Course()
{
this.Students = new HashSet<Student>();
}
你能告诉我为什么这部分是必要的吗?感谢。
答案 0 :(得分:1)
这是必要的,因为您必须实例化您想要使用的ICollection
的特定实现。 HashSet
实现了一个对很多操作非常有效的哈希表,例如在一个大项集中搜索单个项目。但是您可能有理由选择其他实现,例如List
。同样可以将集合实例化为this.Students = new List<Student>();
- 实体框架并不关心,但出于效率原因,默认值为HashSet
。