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
。
我正在尝试在 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
。