當在ASP.NET MVC 4項目 「集合被修改」 的錯誤,我有一個模型LeagueMember
:MVC 4和延遲加載:刪除多個記錄
public class LeagueMember
{
[Key, Column(Order = 0)]
public int MemberId { get; set; }
[Key, Column(Order = 1)]
public int LeagueId { get; set; }
public bool? IsActive { get; set; }
public virtual League League { get; set; }
public virtual Member Member { get; set; }
}
在聯賽模式,我有:
public virtual ICollection<LeagueMember> LeagueMembers { get; set; }
在Edit
視圖League
控制器的,我有一個下拉的LeagueMembers
並在其編輯的行動我想刪除現有LeagueMembers和創造新的:
[HttpPost]
public ActionResult Edit(LeagueMembersViewModel leagueMemberViewModel)
{
if (ModelState.IsValid)
{
var league = leagueMemberViewModel.League;
context.Entry(league).State = EntityState.Modified;
/* without this line the next foreach statement would complain that
League.LeagueMembers is null due to lazy loading..*/
context.Entry(league).Collection("LeagueMembers").Load();
var leagueMembers = leagueMemberViewModel.League.LeagueMembers;
foreach (var leagueMember in leagueMembers)
{
context.LeagueMembers.Remove(leagueMember);
}
foreach (var memberId in leagueMemberViewModel.SelectedMembers)
{
var leagueMember = new LeagueMember { MemberId = memberId, League = league };
context.LeagueMembers.Add(leagueMember);
}
context.SaveChanges();
return RedirectToAction("Index");
}
leagueMemberViewModel.MemberList = new MultiSelectList(context.Members, "Id", "Name", leagueMemberViewModel.SelectedMembers);
return View(leagueMemberViewModel);
}
在執行時,線foreach (var leagueMember in leagueMembers)
上for循環的第二次迭代中抱怨:
集合已修改;枚舉操作可能不會執行
是否有更好的方式刪除一對多關係中的批量記錄?
在這種情況下,刪除全部leagueMemberViewModel.League.LeagueMembers
也許沒有迭代收集?
喜歡的東西,免去:
context.Entry(league).Collection("LeagueMembers").Load();
var leagueMembers = leagueMemberViewModel.League.LeagueMembers;
foreach (var leagueMember in leagueMembers)
{
context.LeagueMembers.Remove(leagueMember);
}
有:
leagueMember.League.LeagueMembers.Remove();
它工作!感謝您的回答。我糾正了錯字。 :-) – Annie 2013-05-02 21:57:08