2012-04-06 3 views
1

Я использую следующий код для обновления некоторых записей из БД:Entity Framework: обновлена ​​запись вставляется (вместо обновленных)

 IList<Item> list; 
     using (DbContext context = new DbContext() 
     { 
      list = Item.ToList(); 
      foreach (Item item in list) 
      { 
       // attach the item 
       context.Item.Attach(item); 

       item.Updated = DateTime.Now; 
       context.Items.Add(item); 
       context.SaveChanges(); 
      } 
     } 

Проблема в том, что EF вставляет новый элемент вместо обновления обновленный элемент ... Я искал abit на сайте и увидел предложение прикрепить элемент к DbContext, но это тоже не работает? Что я делаю не так?

+0

Привет, я немного изменил свой ответ: обычно лучше вызывать 'SaveChanges' только один раз после цикла' foreach', а не внутри цикла. – Slauma

ответ

6

Процедура должна быть:

using (DbContext context = new DbContext() 
{ 
    foreach (Item item in list) 
    { 
     item.Updated = DateTime.Now; 
     context.Entry(item).State = EntityState.Modified;//attaches automatically 
    } 
    context.SaveChanges(); 
} 

Вы вызываете Add что означает INSERT.

Смежные вопросы