实体框架代码首先是多对多关系初始化

时间:2013-12-30 08:05:23

标签: c# entity-framework ef-code-first entity-framework-6

在以下Entity framework official example中。

  1. 为什么Students的初始化仅存在于Course的构造函数中(this.Students = new HashSet<Student>();)?为什么不在Student的构造函数中?
  2. 是否需要初始化?我曾经实现一对多的关系,我没有初始化虚拟List<...>,程序运行正常。 (是因为我使用了List<...>而不是ICollection<...>
  3. public class Student
    {
        public Student() { }
    
        public int StudentId { get; set; }
        [Required]
        public string StudentName { get; set; }
    
        public int StdandardId { 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; }
    }
    

1 个答案:

答案 0 :(得分:2)

  1. 无需初始化它,因为它被标记为virtual并且将根据需要进行延迟加载。但是,如果他们尝试在Students集合中插入新项目,则此初始化很重要 - 因为它会阻止NullReferenceException
  2. 你真的应该使用ICollection而不是List - 在99%的情况下ICollection合同就足够了,使用界面而不是类让你的设计更加灵活(例如你可以使用HashSet而不是List)