EF中的HashSet多对多

时间:2015-02-24 08:27:42

标签: c# entity-framework 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>();
    }

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

1 个答案:

答案 0 :(得分:1)

这是必要的,因为您必须实例化您想要使用的ICollection的特定实现。 HashSet实现了一个对很多操作非常有效的哈希表,例如在一个大项集中搜索单个项目。但是您可能有理由选择其他实现,例如List。同样可以将集合实例化为this.Students = new List<Student>(); - 实体框架并不关心,但出于效率原因,默认值为HashSet