chuckd
chuckd

Reputation: 14540

Exception trying to fill a child entity in Entity Framework

I have a YogaSpaceEvent I'm creating, in it I have an entity called RegisteredStudents. When I create the YogaSpaceEvent I want to add a RegisteredStudent entity to it before I save it. But when I say 'newEvent.RegisteredStudents.Add(newStudent);' I get an object reference not set to an instance of an object. Is there something I'm overlooking or do I have to add a event to the db for I can add a registered student to that newEvent row?

YogaSpaceEvent newEvent = new YogaSpaceEvent
            {
                EventDateTime = details.EventDate.AddHours(DateTime.Parse(displayedTime).Hour).AddMinutes(DateTime.Parse(displayedTime).Minute),

                Time = details.StartTime,
                Duration = details.Duration,
                //blah blah blah

                DateCreated = DateTime.Now,
                DateUpdated = DateTime.Now
            };

RegisteredStudent newStudent = new RegisteredStudent { StudentId = 12345 };
newEvent.RegisteredStudents.Add(newStudent);

yogaSpace.YogaSpaceEvents.Add(newEvent);

dbContext.SaveChanges();

Here are the two entities

public class YogaSpaceEvent
{
    public YogaSpaceEvent() {}

    [Key]
    public int YogaSpaceEventId { get; set; }

    [Index]
    public int YogaSpaceRefId { get; set; }

    [ForeignKey("YogaSpaceRefId")]
    public virtual YogaSpace YogaSpace { get; set; }

    [Required]
    [Index]
    public DateTime EventDateTime { get; set; }

    [Required]
    public YogaTime Time { get; set; }

    [Required]
    public YogaSpaceDuration Duration { get; set; }

    public virtual ICollection<RegisteredStudent> RegisteredStudents { get; set; }
}

Here is RegisteredStudent

public class RegisteredStudent  
 {
    public RegisteredStudent () {}

    [Key]
    public int RegisteredStudentsId { get; set; }

    [Index]
    public int YogaSpaceEventRefId { get; set; }

    [ForeignKey("YogaSpaceEventRefId")]
    public virtual YogaSpaceEvent YogaSpaceEvent { get; set; }

    public int StudentId { get; set; }
}

Upvotes: 1

Views: 34

Answers (1)

Lockdowne
Lockdowne

Reputation: 484

Instantiate your collection RegisteredStudents before calling Add.

  public YogaSpaceEvent()
  {
      this.RegisteredStudents = new List<RegisteredStudent>();
  }

Upvotes: 1

Related Questions