Как добавить пользователей Identity 2.0 в объект

Итак, я пытаюсь понять EF6 и использовать Identity 2.0 для создания отношений "многие ко многим". Это Visual Studio 2013 и шаблон MVC 5.

У меня есть новое приложение MVC со следующими моделями:

public class Meeting
{
    public Guid MeetingID { get; set; }
    public string Title { get; set; }
    public virtual ICollection<ApplicationUser> Attendees { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public ICollection<Meeting> Meetings { get; set; } 
}

Затем я создаю контроллер и представления для Meetings. Теперь, например, если бы я просто хотел добавить каждое user как attendee к моему meeting, я мог бы изменить действие Create, чтобы оно выглядело следующим образом:

public ActionResult Create(Meeting meeting)
{
    if (ModelState.IsValid)
    {
        meeting.MeetingID = Guid.NewGuid();
        db.Users.ForEachAsync(u => meeting.Attendees.Add(u));
        db.Meetings.Add(meeting);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    else...
}

Однако я не думаю, что это работает, потому что я не вижу этого в своем LocalDB, и если я добавлю это в подробное представление для встречи, я не получу никаких результатов:

@{foreach (var item in Model.Attendees)
{
    <li>@item.UserName</li>
}}

В заключение у меня есть два пользователя в LocalDB, test и test2.

Какой учебник или документация позволят мне выполнить эту работу?

* Изменить *

Итак, я попробовал ваше предложение (признаюсь, я не знаком с асинхронностью и ожиданием и с тем, как его реализовать), и мне пришлось изменить контроллер, чтобы я мог использовать ожидание, поэтому я не уверен, что я делаю это правильно сейчас, но я получил следующее для компиляции, и я получаю ошибку времени выполнения «ссылка на объект не установлена ​​​​на экземпляр объекта»:

    public async Task<ActionResult> Create(Meeting meeting)
    {
        if (ModelState.IsValid)
        {
            meeting.MeetingID = Guid.NewGuid();
            await db.Users.ForEachAsync(u => meeting.Attendees.Add(u));
            db.Meetings.Add(meeting);
            db.SaveChanges();

(возможно ли, что мне не хватает некоторых настроек моей модели в Entity Framework? Проект представляет собой именно тот код, который показан выше, плюс значения по умолчанию.)


person Evan Morrison    schedule 10.05.2014    source источник


Ответы (1)


Вы сами себя набьете :)

(Барабанная дробь)

Вы забыли добавить await перед строкой ForEachAsync:

await db.Users.ForEachAsync(u => meeting.Attendees.Add(u));

Без await приложение успешно продолжает работу и сохраняет запись до завершения асинхронного процесса.

ОБНОВЛЕНИЕ

Скорее всего, вы не инициализировали коллекцию Attendees. Просто установите новый List<ApplicationUser> в своем конструкторе.

person Chris Pratt    schedule 11.05.2014