MVC4 EF 代码第一个存储库模式多对多编辑未更新


几天来我一直在为此

绞尽脑汁,并尝试了许多"修复",但都无济于事。

我首先将 MVC4 与 EF 代码一起使用,以及多对多关系上的存储库模式。据我所知,表是正确创建的,因为当我为数据库设定种子时,我的显示正确显示值。

我遇到问题的地方是在尝试保存编辑时。我有一个编辑视图,有一个列表框,其中包含一组枚举的对象(B),在提交(HttpPost)上,我想基本上调用A.ClassBs.Clear()和db。保存更改()。但是,当我这样做时,ClassA.ClassBs不是空白的。

例如,如果我从 A 更新另一个属性,则必须包含 db。入境(A类)。State = EntityState.在 db 之前修改。SaveChanges() 否则更改不会保存到数据库中。

当我包含 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)

我的绑定发生了一些奇怪的事情。我做错了什么?

您在分离的实体上调用viewmodel.A.ClassBs.Clear()。在调用RemoveClear之前,您需要附加实体及其相关ClassB ,以便上下文知道要删除的内容。

如何删除实体中的多对多关系框架

如何添加/附加和实体状态

最新更新