我一直在這幾天一直在困擾着我的大腦,並嘗試了許多「修復」,但都無濟於事。MVC4 EF代碼第一個存儲庫模式多對多編輯不更新
我使用MVC4與EF代碼第一,和存儲庫模式上的多對多關係。根據我可以知道的數據庫的種子數據庫正確創建表,我的顯示正確顯示值。
我遇到的問題是試圖保存編輯。我有一個編輯視圖,列表框包含一組枚舉對象(B's),並且在提交(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)
一些奇怪的發生的事情與我的結合。我究竟做錯了什麼?
當編輯行動呼籲後,你得到的參數是「分離」,所以你必須重視它適用於任何更改的視圖模型。 – jannagy02
你能詳細說一下嗎?我不熟悉附加和分離實體。 – CrazyTegger
根據這篇文章:http://stackoverflow.com/questions/7512636/dbcontext-state-and-original-values,將ClassA的條目的狀態設置爲Modified將照顧到我的附件。但是,仍然不會像我所期望的那樣更新ClassA.ClassBs。 – CrazyTegger