EF - Update multiple rows in database without using foreach loop

前端 未结 2 1540
囚心锁ツ
囚心锁ツ 2020-12-16 00:56

My test code:

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

  var messages = db.Message.Where(x         


        
相关标签:
2条回答
  • 2020-12-16 01:25

    Just to update Steve's answer, in newer EF (current EF Core 3.1.3) you can do it all as one statement.

    await db.Message.Where(m => m.FromUser == fromUser && m.ToUser == toUser).ForEachAsync(m => m.IsRead = true);
    await db.SaveChangesAsync().ConfigureAwait(false);
    
    0 讨论(0)
  • 2020-12-16 01:41

    You don't need to SaveChanges() on each iteration. That will hit the database multiple times. Try:

    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();
    }
    
    0 讨论(0)
提交回复
热议问题