几天来,我一直在为此绞尽脑汁,并尝试了许多“修复”,但都无济于事。
我首先使用带有 EF 代码的 MVC4,以及多对多关系上的存储库模式。据我所知,这些表是正确创建的,当我为数据库播种时,我的显示正确地显示了这些值。
我遇到的问题是尝试保存编辑时。我有一个编辑视图,列表框包含一组枚举的对象 (B),在提交 (HttpPost) 时,我想基本上调用 A.ClassBs.Clear() 和 db.SaveChanges()。但是,当我这样做时, ClassA.ClassBs 不是空白的。
例如,如果我从 A 更新另一个属性,我必须在 db.SaveChanges() 之前包含 db.Entry(ClassA).State = EntityState.Modified ,否则更改不会保存到数据库中。
当我包含 EntityState.Modified 行时,ClassA 会按预期更新,但多对多关系除外。ClassA.ClassB 保持不变。
这里有一些
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)
我的装订发生了一些奇怪的事情。我究竟做错了什么?