我以幾種不同的方式提出了幾個不同的問題,但我還沒有收到任何回覆。我再次嘗試,因爲我覺得我的解決方案過於複雜,我必須錯過簡單的事情。更新多對多關係
在MVC 3應用程序中使用EF 4.1,POCO,DbContext API,AutoMapper和Razor。
我有兩個我的實體之間有多對多的關係:Proposals和CategoryTags。我可以成功將提案(Automapper)映射到我的ProposalViewModel,包括CategoryTag的集合。
在我的視圖中,我使用javascript來允許用戶通過動態創建元素來添加,更新和移除標籤,每個元素存儲所選標籤的ID。
我可以成功地將我的ViewModel發佈回我的控制器,它的CategoryTags集合已填充(儘管只與每個CategoryTag的ID屬性一起)。
當ViewModel重新發布到我的控制器時,我不知道如何從ViewModel獲取這些標記並將它們添加到我的模型中,以便db.SaveChanges()正確更新數據庫。
的唯一辦法我已經沒有成功是斷開的映射分類|標籤集合(由不同納米格他們),通過每個標籤遍歷並手動在我的背景下看它,然後調用。新增( ) 方法。由於種種原因,這很sl which,導致我認爲我做錯了。
任何人都可以提供任何方向嗎?
UPDATE:
對於任何人誰是有興趣的,我的功能代碼:
Dim p As New Proposal
Dim tempTag As CategoryTag
p = AutoMapper.Mapper.Map(Of ProposalViewModel, Proposal)(pvm)
db.Proposals.Attach(p)
db.Entry(p).Collection("CategoryTags").Load()
For Each ct In pvm.Tags
tempTag = db.CategoryTags.Find(ct.Id)
If tempTag Is Nothing Then
Continue For
End If
If ct.Tag = "removeMe" Then
p.CategoryTags.Remove(tempTag)
Continue For
End If
p.CategoryTags.Add(tempTag)
Next
db.Entry(p).State = EntityState.Modified
db.SaveChanges()
Return RedirectToAction("Index")
Ladislav,Thak你,這是我需要聽到的不幸答案。如果這是唯一的方法,那麼,我會期待EF 4.2解決這個問題.. :) – 2011-05-03 20:50:00
我回答了類似的問題20+次,之後我不得不說,這可能不會有任何自動解決方案問題。如果你有分離的實體,你必須以某種方式說EF你做了什麼。它是一樣的,如果你想插入,更新,手動刪除。你必須知道什麼被刪除和插入了什麼。 – 2011-05-03 22:41:06
我認爲這是有道理的,如果EF有某種「自動調節器」,至少試圖根據您的分離實體與當前實體之間的差異來計算出來,那將會很好。 對不起,您必須回答這麼多次,我很難找到有關此主題的確認答案。 – 2011-05-04 15:13:07