如何使用实体框架核心更新与普通 SQL 更新查询相同的多条记录列表?

sha*_*rif 2 entity-framework-core asp.net-core

通常在 SQL 中我们可以编写这个查询 UPDATE users SET isAdult = 1 WHERE age >18

我想对满足实体框架核心中某些条件的所有行应用一些编辑。

我写了这段代码,但出现错误

List<User> usersList = _context.Users.Where(u => u.age >18).ToList();
usersList.ForEach(a =>
                {
                    a.isAdult = 1;
                });
_context.Entry(usersList).State = EntityState.Modified;
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

错误是

System.InvalidOperationException:未找到实体类型“列表”。确保实体类型已添加到模型中。在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.GetOrCreateEntry(Object entity) 在 Microsoft.EntityFrameworkCore.DbContext.EntryWithoutDetectChanges[TEntity](TEntity entity) 在 Microsoft.EntityFrameworkCore.DbContext.Entry[TEntity](TEntity entity)

我做了这个更新,但我想知道这是否是最好的方法。

List<Users> usersList = _context.Users.Where(u => u.age >18).ToList();
usersList.ForEach(a =>
                {
                    a.isAdult = 1;
                    _context.Entry(a).State = EntityState.Modified;
                     _context.SaveChanges();
                });
Run Code Online (Sandbox Code Playgroud)

Ton*_*ams 5

错误是因为列表未定义为 EF 实体。

最后,您不需要自己修改状态。

List<User> usersList = _context.Users.Where(u => u.age >18).ToList(); 
usersList.ForEach(a => { a.isAdult = 1; });
 _context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)