2015-11-23 58 views
0

這是我第一次更新EF表上的相關數據。更新相關數據EF數據庫優先

var _agent = _unitOfWork.AgentsRepository.GetByID(agent.AgentId); 
_agent.map_Agent_Language = new System.Collections.Generic.HashSet<map_Agent_Language>(); 
var numlist = new System.Collections.Generic.List<int>() { 1,2,3,4,5}; 

foreach (var item in numlist) 
{ 
    _agent.map_Agent_Language.Add(new map_Agent_Language() { AgentLanguageId = 0, AgentId = agent.AgentId, LanguageId = Convert.ToInt32(item) }); 
} 

_unitOfWork.AgentsRepository.Update(_agent); 
int result = _unitOfWork.Save(); 

return (result > 0); 

這些是使用的方法。

 public virtual void Update(TEntity entityToUpdate) 
     { 
      dbSet.Attach(entityToUpdate); 
      context.Entry(entityToUpdate).State = EntityState.Modified; 
     } 

     public int Save() 
     { 
      return _context.SaveChanges(); 
     } 

編輯:

此代碼插入一個新之前插入對錶map_agent_language而不是刪除舊數據DATAS。

如何強制EF在插入前先刪除它?

TNX ..

PS是否有更新的DB頭相關DATAS更好的辦法?感謝

+0

檢查傳遞不爲null。如果它不爲空,那麼檢查它應該是標識列,在這種情況下,你不應該通過它。 –

+0

@GirishSakhare嗨,親切地檢查我編輯的問題tnx。 –

回答

1

基本上你應該AGENTID先把舊的數據,只添加所需的新數據並刪除不需要的數據

repo.GetQuery().Where(r => r.AgentId == AgentId && !numlist .Contains(r.LanguageId)).Delete(); 

這時如果AGENTID添加

foreach (int item in numlist) 
    { 
    if (!existing.Contains(item)) 
      { 
       var toAdd = new map_Agent_Language 
       { 
        ... The properties to set 
       }; 

       repo.AddObject(toAdd); 
      } 
     } 
     repo.SaveChanges(); 
+0

什麼是獲取查詢?順便說一句我正在使用DBcontext –

+0

你可以忽略那部分,你可以用你方便的方式來獲取現有記錄並刪除不需要的部分,並添加缺少的部分。 –

+0

謝謝你給我一個主意。我擴展了我們的泛型庫,然後在更新代理信息之前添加了用於刪除相關數據的數據庫事務處理! –

相關問題