使用EF更新特定属性

本文关键字:属性 更新 EF 使用 | 更新日期: 2023-09-27 18:13:19

我不得不使用EF来update single field in my database。我这样做:

1 -根据名称

从表中加载原始记录

2 -更新字段值

3 -将对象保存回db

代码:

public void UpdateUser(List<User> users)
{
    foreach (User user in users)
    {
        Job original = _context.Users.Where(x => x.Name == user.Name).AsNoTracking().FirstOrDefault();
        if (original != null)
        {                   
            original.Name = user.Nanme;
            _context.Entry(original).State = EntityState.Modified; // not sure it is needed or not
        }
        _context.SaveChanges();           
    }
}

这是一种有效的方法吗?或者我可以用更好的方法?

使用EF更新特定属性

根据名称从表中加载原始记录。

这不是一个很好的做法,你应该得到基于id的记录

  Job original = _context.Users.Where(x => x.id== user.id).AsNoTracking().FirstOrDefault();

并且_context.SaveChanges();应该在foreach之外,因此将执行一次更新。

这里需要_context.Entry(original).State = EntityState.Modified;,它表示实体正在被上下文跟踪并且存在于数据库中,并且其部分或全部属性值已被修改。

最后你的代码看起来像:

foreach (User user in users)
{
  Job original = _context.Users.Where(x => x.id== user.id).AsNoTracking().FirstOrDefault();
  if (original != null)
  {                   
    original.Name = user.Nanme;
   _context.Entry(original).State = EntityState.Modified;
  }                      
}
 _context.SaveChanges(); 

希望这对你有帮助!

这个怎么样,

foreach (User user in users)
{
  _context.Users.Find(user.id).Name = user.Name;
}                      
_context.SaveChanges();