EF - 在不使用foreach循环的情况下更新数据库中的多行

时间:2015-12-05 16:35:10

标签: c# entity-framework linq

我的测试代码:

using (var db = new MyDbContext())
{
  string fromUser = ""; //sender
  string toUser = ""; //receiver

  var messages = db.Message.Where(x => x.FromUser == fromUser && x.ToUser == toUser)
                 .ToList();

  foreach (var message in messages)
  {
    message.IsRead = true;
    db.SaveChanges();
  }
}

我的问题:在这种情况下,是否有其他方法可以在不使用foreach循环的情况下更新数据库?

p / s:我已经提到了这些问题,但所有这些问题并没有解决我的问题:

2 个答案:

答案 0 :(得分:22)

每次迭代都不需要SaveChanges()。这将多次击中数据库。尝试:

using (var db = new MyDbContext())
{
  string fromUser = ""; //sender
  string toUser = ""; //receiver
  var messages = db.Message.Where(x => x.FromUser == fromUser && x.ToUser == toUser)
                 .ToList();
  messages.ForEach(m => m.IsRead = true);
  db.SaveChanges();
}

答案 1 :(得分:3)

只需更新Steve的答案,在更新的EF(当前EF Core 3.1.3)中,您就可以将所有内容作为一个语句来完成。

await db.Message.Where(m => m.FromUser == fromUser && m.ToUser == toUser).ForEachAsync(m => m.IsRead = true);
await db.SaveChangesAsync().ConfigureAwait(false);