ef核心更新多个项目然后保存

时间:2017-09-07 08:28:34

标签: c# entity-framework asp.net-core entity-framework-core

我需要更新数据库中的多个项目。

我的问题:

  • 我需要使用ctx.Items.Update(item); ?
  • 我可以先在循环中更新所有项目,然后使用ctx.SaveChangesAsync()吗?

基本上我需要加快速度,所以我假设如果我更新items属性然后为所有这些属性调用SaveChangesAsync()它将调用一个数据库,而不是在每个项目的循环内部进行调用?

ctx.Items.Update(item)怎么样?有没有任何意义呢?我想我需要这个,否则怎么知道要更新什么,对吧?

using (var ctx = new MyCOntext())
{
     var allToBeUpdated = await ctx.Items.Where(t=>t.ToBeUpdated == true).ToListAsync();

      foreach (var item in allToBeUpdated)
      {
            item.ToBeUpdated = false;

            ctx.Items.Update(item); // do I need this ?
      }

       await ctx.SaveChangesAsync();  // can I have the save changes async out of foreach? So I can update all the items at once rather than one by one
}

1 个答案:

答案 0 :(得分:3)

以下内容应足以保存值

using (var ctx = new MyCOntext())
{
     var allToBeUpdated = await ctx.Items.Where(t=>t.ToBeUpdated == true).ToListAsync();

      foreach (var item in allToBeUpdated)
      {
            item.ToBeUpdated = false; //change tracking will take care of tracking what is changed
      }

       await ctx.SaveChangesAsync();  // Save changes outside will update all the pending changes 
}