2011-06-04 31 views
0

我已經pk_answerid一個回答表,存儲爲1,3,2 answertext,fk_questionid,chosenoptions(逗號分隔),如果填充,然後chosenoptions刪除實體EF4 ......不同的場景是如何處理

answertext null,如果選擇選項如果填充,則answertext爲null。

ChosenOption表具有結構pk_chosenoptionid,fk_questionid 在4的EntityFramework, 我沿着這些線路

void SaveAnswers(ICollection<Answer> answers) 
{ 
     context.Answers.Add(answers); 
     context.SaveChanges(); 
} 

這工作得很好的東西....但是當在UI我回到頁面是嚮導與Q & A在不同的頁面上,我取消選擇先前選擇的所有答案,然後單擊保存,不會刪除答案。我也試過DeleteObject,它不會刪除答案和選擇的選項,即使我在答案表上級聯刪除選擇了選項表。 同樣在編輯方案中,例如對於例如如果用戶選擇了1,2選項,然後保存它,然後返回並選擇3,2,那麼如何在EF中編寫代碼來完成如此複雜的工作。我還沒有遇到任何解釋這種情況的教程。我見過的大部分內容都是簡單的添加,刪除和應用屬性更改。我有一個MVC應用程序,它啓用了延遲加載。 請幫助並使用示例或任何指向已解釋此博客的指針來建議某種代碼。

+1

添加涉及實體的定義(代碼) - 問題,答案,導航屬性,PK和FK可見的選項。還添加用於更新答案的代碼。 – 2011-06-04 13:47:43

+0

你是什麼意思的定義代碼? – chugh97 2011-06-04 16:17:16

+1

我的意思是你的實體代碼將顯示它們的樣子,因爲你的描述完全不清楚。還有以防萬一:你如何處理嚮導中的步驟?每一步之後都不保存更改,是嗎? – 2011-06-04 16:18:41

回答

2

EF不照顧 - 我恥一次又一次地發佈,但我真的不喜歡每次來解釋它:Update relationships when saving changes of EF4 POCO objects

檢查的解釋。你的問題是類似的。你堅持實體圖(一組相關的實體),現在你想改變圖。您的新圖形是從Web請求中提取的,這意味着它被分離,EF不知道發生了什麼變化。您必須手動完成 - 我剛纔討論了在another question中手動執行它意味着什麼=它通常太複雜。

最簡單的方法是你目前的做法 - 刪除一切並重新添加,但它確實很難看。另一種方法是從數據庫加載圖並手動合併您從請求中獲得的所有更改=比較這兩個圖並更新加載的(附加的)。請注意,您必須手動撥打DeleteObject才能從數據庫中刪除任何內容。然後,請撥打SaveChanges

Btw。如果你正在做嚮導,爲什麼你不只是在會話中存儲當前狀態並在用戶完成嚮導後保存所有內容?您將避免所有這些複雜情況。