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

Tân*_*Tân 8 c# linq entity-framework

我的测试代码:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

p/s:我一直在提到这些问题,但所有问题都没有解决我的问题:

Ste*_*ene 23

每次迭代都不需要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();
}
Run Code Online (Sandbox Code Playgroud)

  • 创建一个列表和lambda只是为了调用一个内部是循环的方法。疯狂的人。 (2认同)

Sco*_*ost 6

只是为了更新史蒂夫的答案,在较新的 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);
Run Code Online (Sandbox Code Playgroud)