2016-02-11 35 views
0
Class Student 
{ 
    public string Name { get; set; } 
    public List<Location> Locations { get; set; } 
} 

的情況是這樣的:實體框架6 - ASP.Net MVC - 檢測後上改變集合回

  1. 頁面加載到客戶端與學生使用實體框架(EF)6
  2. 列表除去一個由客戶端編輯的位置,但另一位補充
  3. 學生回發來保存和自動綁定到模型

我可以附上學生回用EF背景:

context.Entry(Student).Attach(); 

的問題是,EF不會檢測位置的變化。我必須:

  1. 新地點保存位置列表
  2. 設置Student.Locations = NULL;
  3. 然後通過所有Student.Locations重視學生的的DbContext
  4. 通過所有的新位置列表是我救刪除每一個
  5. 循環,從數據庫中提取的位置,然後添加到學生
  6. 最後保存

真是痛苦。有任何想法嗎?

+1

是的,這是一個已被指出的痛點。 https://entityframework.codeplex.com/workitem/864你將需要實現這樣的代碼http://stackoverflow.com/questions/27176014/how-to-add-update-child-entities-when-updating-a -parent-entity-in-ef –

回答

0

您可能最好獨立實施不同的操作: IE:一個用於添加位置的動作和另一個用於刪除現有動作的動作。

然後你可以用ajax調用它們來保持用戶的交互性。

+0

讓用戶進行更改會更有效,然後最後保存。這是檢測到這些變化的整個概念,這是問題。 – Ian

+0

這真的取決於你對事物的看法,但我認爲在Web應用程序的上下文中分離動作更好。比如說,用戶做了很多修改,然後導致瀏覽器崩潰,他將失去所有更改。如果每次改變都是有效的,他最多會失去最後一次改變。只是一個簡單的例子來說明爲什麼這種方法可能更好 –

+0

好點。那麼這意味着在編輯過程中保持數據在會話中,以便EF可以跟蹤所有內容。 – Ian