1

EF4でコンテンツのリストを更新しようとしています。しかし、私はそれを行う方法を発見していない。次のように私の現在のコードは次のとおりです。リストを更新する<Entity>(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のに添付されているので2回目の更新は常に当然失敗し、そしてだろうが。

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'を行う '何が? –

+0

エンティティをセット番号に追加しますか? – Johann

+0

申し訳ありませんが、もちろん、それはオブジェクトコンテキストで生成されたメソッドです。 –

答えて

1

私はEntityFramework.Extendedライブラリをダウンロードして、以下のように

は、だから私はresoved一括更新を行うための.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}); 
関連する問題