更新EF4 </entity>中的List <entity>

时间:2012-02-23 13:23:53

标签: entity-framework c#-4.0 entity-framework-4 linq-to-entities

我正在尝试使用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)
    {
    }
}

然而,第二次更新将始终失败,并且可以理解,因为实体已附加到datacontext。

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

更新

按如下方式更改循环

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

        db.SaveChanges();

我收到以下错误: -

ObjectStateManager中已存在具有相同键的对象。 ObjectStateManager无法使用相同的键跟踪多个对象。

1 个答案:

答案 0 :(得分:1)

我已经下载了EntityFramework.Extended Library,并且有一个名为.Update的方法来进行批量更新

所以我重新修改如下: -

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