保存多级实体

时间:2015-06-22 20:04:55

标签: c# asp.net-mvc entity-framework asp.net-web-api circular-reference

我有一个3级实体,我在保存它时遇到了一些麻烦。

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; }
}

事件类的Post控制器如下所示:

// 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);
    }

当我使用类似DTO的事件调用PostEvent方法时,我得到http错误代码500。

首先,我如何添加异常处理以捕获特定错误,其次,我在这里做错了什么?

非常感谢任何帮助。

感谢。

0 个答案:

没有答案