2017-03-06 69 views
0

我有列表對象,並嘗試檢查和更新在這裏列表這些項目是我的代碼:實體框架如何更新列表記錄

using (var uow = new WareHouseUnitOfWork(WareHouseConnection)) 
{ 
    foreach (var item in lData) 
    { 
    if (uow.UsageSessionWareHouseRepository.Contains(x => x.RadAcctRefId == item.RadAcctRefId)) 
    { 
     uow.UsageSessionWareHouseRepository.Context.Entry(item); 
     uow.UsageSessionWareHouseRepository.DbSet.Attach(item); 
     uow.UsageSessionWareHouseRepository.Context.Entry(item).State = EntityState.Modified; 
    } 
    else 
    { 
     uow.UsageSessionWareHouseRepository.DbSet.Add(item); 
    } 
    } 

    session.SessionStatus = "Processed"; 
    var entry = uow.SessionWareHouseRepository.Context.Entry(session); 
    uow.SessionWareHouseRepository.DbSet.Attach(session); 
    entry.State = EntityState.Modified; 

    uow.Save(); 
    } 

在第一循環寄託都不錯,但在未來我得到一個錯誤:

附加型「DataRetention.Core.DataEntities.WareHouseEntites.UsageSessionWareHouse」的實體失敗,因爲同類型的另一實體已經有相同的主鍵值。如果圖中的任何實體具有衝突的鍵值,則使用「附加」方法或將實體的狀態設置爲「未更改」或「已修改」時可能會發生這種情況。這可能是因爲一些實體是新的並且還沒有收到數據庫生成的關鍵值。在這種情況下,使用'Add'方法或'Added'實體狀態來跟蹤圖形,然後根據情況將非新實體的狀態設置爲'Unchanged'或'Modified'。

我不知道如何更新像DbSet.Add(item)。

回答

0

一旦你發現你可以直接編輯的記錄,你不必再連接或EntryState.modified做的,將已經爲您

+0

被跟蹤,所以我需要找到記錄並分配什麼樣的價值我想更新每個對象是否正確? – beginerdeveloper