Saving multi-level entity

103 views Asked by At

I have a 3 level entity and I am having some trouble saving it.

public partial class Event
{
    public Event()
    {
        Recurrences = new HashSet<Recurrence>();
    }
    public int Id { get; set; }
    public string Title { get; set; }
    public ICollection<Recurrence> Recurrences { get; set; }
}

public partial class Recurrence
{
    public Recurrence()
    {
        AspNetUsers = new HashSet<AspNetUser>();
    }
    public int Id { get; set; }
    public int EventId { get; set; }
    public string Venue { get; set; }
    public ICollection<AspNetUser> AspNetUsers { get; set; }
}

public partial class AspNetUser
{
    public AspNetUser()
    {
        Recurrences = new HashSet<Recurrence>();
    }
    public string Id { get; set; }
    public string UserName { get; set; }
    public ICollection<Recurrence> Recurrences { get; set; }
}

The Post controller for the Event Class looks like this:

// POST: api/Events
[ResponseType(typeof(Event))]
public async Task<IHttpActionResult> PostEvent(EventDTO @event)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

        var newEvent = new Event();
        newEvent.Title = @event.Title;
        newEvent.EventTypeId = @event.EventTypeId;

        var recurrence = new Recurrence();
        recurrence.Venue = @event.Venue;

        var users = db.AspNetUsers.Where(u => @event.UserId.Contains(u.Id));
        foreach (var u in users)
            recurrence.AspNetUsers.Add(u);

        newEvent.Recurrences.Add(recurrence);

        db.Events.Add(newEvent);
        await db.SaveChangesAsync();

        return CreatedAtRoute("DefaultApi", new { id = newEvent.Id }, newEvent);
    }

When I call the PostEvent method with an Event like DTO i get the http error code 500.

first, how can i add exception handling to capture the specific error and secondly, what I'm I doing wrong here?

Any help is deeply appreciated.

Thanks.

0

There are 0 answers