3 回答
TA贡献1799条经验 获得超6个赞
试试这个更新:
[HttpPost]
public ActionResult Edit(Models.MathClass mathClassModel)
{
//get current entry from db (db is context)
var item = db.Entry<Models.MathClass>(mathClassModel);
//change item state to modified
item.State = System.Data.Entity.EntityState.Modified;
//load existing items for ManyToMany collection
item.Collection(i => i.Students).Load();
//clear Student items
mathClassModel.Students.Clear();
//add Toner items
foreach (var studentId in mathClassModel.SelectedStudents)
{
var student = db.Student.Find(int.Parse(studentId));
mathClassModel.Students.Add(student);
}
if (ModelState.IsValid)
{
db.SaveChanges();
return RedirectToAction("Index");
}
return View(mathClassModel);
}
TA贡献1895条经验 获得超7个赞
我想在此加上我的经验。实际上,当您将对象添加到上下文时,它会将所有子项和相关实体的状态更改为“已添加”。虽然规则中存在一个小例外:如果孩子/相关实体被相同的上下文跟踪,EF确实理解这些实体存在并且不添加它们。例如,当您从其他某个上下文或web ui等加载子/相关实体然后是,EF不知道有关这些实体的任何内容并且添加所有这些实体时,就会出现问题。为了避免这种情况,只需获取实体的密钥并找到它们(例如context.Students.FirstOrDefault(s => s.Name == "Alice"))
,在您想要添加的相同上下文中)。
- 3 回答
- 0 关注
- 407 浏览
添加回答
举报