1

我試圖用EF4更新內容列表。但是我還沒有找到辦法。我當前的代碼如下:在EF4中更新列表<Entity>

db.NotifContents.MergeOption = MergeOption.NoTracking; 
List<NotifContent> notifContentList = db.NotifContents 
    .Where(u => u.FKID_Contact == contactId && !u.Sent && u.CanSendMail) 
    .ToList(); 

List<NotifContent> newNotifContentList = new List<NotifContent>(); 

foreach(NotifContent notifContent in notifContentList) 
{ 
    notifContent.NextMailSend = dtNextMailSend;  newNotifContentList.Add(notifContent); 
    try 
    { 
     //db.CreateObjectSet<NotifContent>().Attach(notifContent); 
     //db.ObjectStateManager.ChangeObjectState(notifContent, System.Data.EntityState.Modified); 

     db.AddToNotifContents(notifContent); 
     ObjectStateEntry notifContentsEntry = db.ObjectStateManager 
      .GetObjectStateEntry(notifContent); 
     notifContentsEntry.ChangeState(EntityState.Modified); 

     db.SaveChanges(); 

    } 
    catch (Exception exc) 
    { 
    } 
} 

但是由於實體附加到DataContext的第二次更新將始終失敗,可以理解。

如何在EF4中進行批量更新?

UPDATE

改變循環如下

  foreach(NotifContent notifContent in notifContentList) 
     { 
      notifContent.NextMailSend = dtNextMailSend; 
      db.NotifContents.Attach(notifContent); 
      db.ObjectStateManager.ChangeObjectState(notifContent, EntityState.Modified); 
     } 

     db.SaveChanges(); 

,我收到以下錯誤: -

與已經在ObjectStateManager存在相同的密鑰的對象。 ObjectStateManager不能使用同一個鍵跟蹤多個對象。

+0

什麼'db.AddToNotifContents'做? – 2012-02-23 13:40:24

+0

它將實體添加到set no? – Johann 2012-02-23 13:54:19

+0

對不起,當然,它是在對象上下文中生成的方法。 – 2012-02-23 14:02:36

回答

1

我已經下載了EntityFramework.Extended庫,有一個叫.Update方法做批量更新

所以我resoved如下: -

  var notifContents = 
      db.NotifContents.Where(u => u.FKID_Contact == contactId && u.Sent == false && u.CanSendMail); 
     db.NotifContents.Update(notifContents, u => new NotifContent{NextMailSend = dtNextMailSend});