2014-02-12 70 views
1

實體的子集合在分離狀態時如何更新?我有GroupsUsers之間的多對多關係。當用戶編輯一個組時,在回發後,我得到一個用戶ID列表,以添加或從組中刪除。問題是當分離viewModel.Group時,重新附加和保存實體時,對子集合的更改不會得到反映。下面是代碼...使用修改後的子實體更新分離的實體

if (ModelState.IsValid) 
{ 
    if (viewModel.SelectedUserIDs != null) 
    { 
     foreach (var id in viewModel.SelectedUserIDs) 
     { 
      var user = _userRepo.GetUser(id); 
      viewModel.Group.Users.Add(user); 
     } 
    } 
    _groupRepo.SaveGroup(viewModel.Group); 
} 

存儲組方法

if (group.GroupID <= 0) 
{ 
    Context.Groups.Add(group); 
} 
else if (Context.Entry(group).State == System.Data.Entity.EntityState.Detached) 
{ 
    Context.Groups.Attach(group); 
    Context.Entry(group).State = System.Data.Entity.EntityState.Modified; 
} 

Context.SaveChangesAsync(); 

兩件事情我已經試過被重新連接實體馬上和變更

if (ModelState.IsValid) 
{ 
    _groupRepo.Attach(viewModel.Group); 
    if (viewModel.SelectedUserIDs != null) 
    { 
... 

但同樣的問題發生。當實體保存時,子集合將恢復到原始狀態。

我發現的唯一的解決方法是取得一個新的實體和修改新實體的集合作爲預期這將持續改變,但使用這種方式迫使我屬性更改複製從viewModel.GroupfreshGroup

if (ModelState.IsValid) 
{ 
    var freshGroup = _groupRepo.GetGroup(viewModel.Group.GroupID); 
    if (viewModel.SelectedUserIDs != null) 
    { 
     //make child collection changes to 'freshGroup' 
     //copy properties from 'viewModel.Group' to 'freshGroup' 
    ... 

回答

0

您必須手動設置每個項目的實體狀態:

dbContext.Entry(entity).State = EntityState.Modified; 

您還需要對子實體執行此操作。