我的测试代码:
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
循环的情况下更新数据库?
答案 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);