2012-04-06 97 views
1

我用下面的代碼來更新從數據庫中的某些記錄:實體框架:更新的記錄被插入(而不是更新)

 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被插入一個新的項目,而不是更新更新後的項目...我搜索了網站上的升技,看到了將該項目附加到DbContext的建議,但是那也不起作用?我究竟做錯了什麼?

+0

嗨,我已經對我的答案做了一些改變:通常最好在'foreach'循環後面調用'SaveChanges',而不是在循環內部。 – Slauma 2012-04-06 12:40:16

回答

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。