Я пытаюсь обновить список содержимого с помощью EF4. Однако я не нашел способ сделать это. Мой текущий код выглядит следующим образом:
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)
{
}
}
Однако второе обновление всегда будет неудачным, и понятно, что сущность присоединена к текстовому тексту данных.
Как мне сделать массовое обновление в EF4?
UPDATE
Измените цикл следующим образом
foreach(NotifContent notifContent in notifContentList)
{
notifContent.NextMailSend = dtNextMailSend;
db.NotifContents.Attach(notifContent);
db.ObjectStateManager.ChangeObjectState(notifContent, EntityState.Modified);
}
db.SaveChanges();
и я получаю следующую ошибку: -
Объект с таким же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.