EF 中的 HashSet 多对多

HashSet in EF many to many

我正在尝试在 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>();
    }

你能告诉我为什么这部分是必要的吗?谢谢

这是必要的,因为您必须实例化您想要使用的 ICollection 的特定实现。 HashSet 实现了一个散列 table,它对许多操作非常有效,例如在大集合中搜索单个项目。但您可能有选择其他实现的原因,例如 List。同样可以将集合实例化为 this.Students = new List<Student>(); - Entity Framework 无关紧要,但出于效率原因,默认值为 HashSet