因此,我正在尝试掌握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
as添加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上缺少我的模型的某些设置?该项目正是上面显示的代码加上默认值。)
你要踢自己:)
(击鼓)
您忘了在行await
前添加ForEachAsync
:
await db.Users.ForEachAsync(u => meeting.Attendees.Add(u));
如果没有await
使应用程序愉快地继续运行并保存记录,则所有操作均在该异步过程完成之前进行。
更新
您很可能尚未初始化Attendees
集合。只需List<ApplicationUser>
在构造函数中将其设置为新的即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句