使用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();
}
}
这是一种有效的方法吗?或者我可以用更好的方法?
根据名称从表中加载原始记录。
这不是一个很好的做法,你应该得到基于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();