I'm trying to write a relational database application using Entity Framework 6. I have classes analogous to:
public class Subject
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
public class Student
{
public int ID { get; set; }
public int SubjectID { get; set; }
public string Name { get; set; }
public virtual Subject Subject { get; set; }
}
(OK this is a bad example because in reality you'd want each student to be in more than one subject but let's ignore this for now as it was the best example that I could think of.)
The problem is that, whenever there's a subject with no students, instead of subjectInstance.Students
returning an empty collection it instead returns null
. This means that I cannot call subjectInstance.Students.Add(studentInstance)
to add the first student. I instead have to add the student separately, by calling contextInstance.Students.Add(studentInstance)
after manually setting the SubjectID
field on studentInstance
. Once there's one or more students already associated with the subject, subjectInstance.Students
is no longer null and I can add further students in the expected way.
What I've already tried:
Removing
virtual
frompublic virtual ICollection<Student> Students { get; set; }
- no changeCalling
contextInstance.Entry(subjectInstance).Collection("Students").Load()
before attempting to access the collection - works but it's messy and breaks separation of concerns (the modules that work with the data shouldn't have to concern themselves with loading the data)Calling
contextInstance.Subjects.Include("Students")
at some point before creatingsubjectInstance
- no change