0

几天来,我一直在为此绞尽脑汁,并尝试了许多“修复”,但都无济于事。

我首先使用带有 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)

我的装订发生了一些奇怪的事情。我究竟做错了什么?

4

1 回答 1

0

你调用viewmodel.A.ClassBs.Clear()一个分离的实体。您需要在调用之前附加实体及其相关的,以便上下文知道要删除什么。ClassBRemoveClear

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

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

于 2013-10-17T18:06:05.553 回答