2015-02-24 84 views
1

我试图在EF Code-first中实现多对多。我发现这个代码:EF中的HashSet多对多

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

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