绞尽脑汁,并尝试了许多"修复",但都无济于事。
我首先将 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()
。在调用Remove
或Clear
之前,您需要附加实体及其相关ClassB
,以便上下文知道要删除的内容。
如何删除实体中的多对多关系框架
如何添加/附加和实体状态