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. 现在,例如,如果我只想将 everyuser作为 an添加attendee到 mymeeting中,我想我可以修改该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。

什么教程或文档可以让我完成这项工作?

* 编辑 *

所以我尝试了你的建议(我承认,我不熟悉 async 和 await 以及如何实现它),我不得不修改控制器以允许我使用 await 所以我不确定我是否在做现在这是正确的,但是我得到了以下要编译的内容,并且出现“对象引用未设置为对象的实例”的运行时错误:

    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 上缺少我的模型的一些设置?该项目正是上面显示的代码加上默认值。)

4

1 回答 1

1

你会踢自己的:)

(击鼓)

您忘记在行await前添加:ForEachAsync

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

没有await应用程序愉快地继续并保存记录,所有这些都在异步过程完成之前完成。

更新

很可能您还没有初始化Attendees集合。只需在构造函数中将其设置为 new 即可List<ApplicationUser>

于 2014-05-11T01:31:37.423 回答