我几天来一直在嘲笑我的大脑并尝试了许多“修复”,但都无济于事。
我首先使用MVC4和EF代码,以及多对多关系的存储库模式。正如我所知,当我为数据库播种时,表格是正确创建的,我的显示正确显示了值。
我遇到问题的地方是尝试保存编辑。我有一个编辑视图,其中一个列表框包含一组枚举的对象(B),在提交(HttpPost)上,我想基本上调用A.ClassBs.Clear()和db.SaveChanges()。但是当我这样做时,ClassA.ClassBs不是空白的。
例如,如果我从A更新另一个属性,我必须在db.SaveChanges()之前包含db.Entry(ClassA).State = EntityState.Modified,否则更改不会保存到数据库中。
当我包含EntityState.Modified行时,ClassA会按预期更新,但多对多关系除外。 ClassA.ClassBs没有变化。
这是一些
Models
class A
{
...
virtual IEnumerable<ClassB> ClassBs {get;set;}
}
class B
{
...
virtual IEnumerable<ClassA> ClassAs {get;set;}
}
Controller
public ActionResult Edit(int id - 0)
{
... (create viewmodel)
return View(viewmodel)
}
[HttpPost]
public ActionResult Edit(viewmodel)
{
viewmodel.A.ClassBs.Clear();
db.Entry(viewmodel.A).State = EntityState.Modified;
db.SaveChanges();
}
View
@Html.ListBoxFor(model => model.ClassA.ClassBs, Model.ClassBs)
我的绑定发生了奇怪的事情。我做错了什么?
答案 0 :(得分:0)
您在分离的实体上调用viewmodel.A.ClassBs.Clear()
。在调用ClassB
或Remove
之前,您需要附加实体和与其相关的Clear
,以便上下文知道要删除的内容。