如何使用实体框架核心更新与常规SQL Update查询相同的多个记录列表?

时间:2019-07-06 23:13:19

标签: asp.net-core entity-framework-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();

错误是

  

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

我进行了此更新,但我想知道这是否是最好的方法。

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();
                });

1 个答案:

答案 0 :(得分:2)

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

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

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