【发布时间】:2021-08-12 20:51:21
【问题描述】:
我正在使用 C# .NET Framework,我需要知道如何验证我需要更新的所有字段,例如,我有一个包含四个字段的表,因此,如果用户只需要更改字段,我怎样才能只更新那个字段,实际上我有这个代码:
public async Task<ServiceResponse<User>> UpdateUser(User newUserUpdate)
{
ServiceResponse<User> serviceResponse = new();
//Este llamada es para buscar por medio del ID ingresado por el usuario
User userFinded = await _dataContext.Users.FindAsync(newUserUpdate.Id);
//¿Como iterar para validar que campos actualizar?
if (newUserUpdate.userName != null) userFinded.userName = newUserUpdate.userName;
if (newUserUpdate.email != null) userFinded.email = newUserUpdate.email;
if (newUserUpdate.password != null) userFinded.password = newUserUpdate.password;
_dataContext.Users.Update(userFinded);
_dataContext.SaveChanges();
serviceResponse.Message = "Usuario Actualizado Exitosamente";
return serviceResponse;
}
我正在使用 IF 语句来验证和更新新值,但我认为这不是一个好习惯。也许是 lambda 表达式?
【问题讨论】:
-
删除
_dataContext.Users.Update(userFinded);,它将按预期工作。 -
@SvyatoslavDanyliv 如果 OP 删除了
_dataContext.Users.Update(userFinded);,那么将不会保存任何更改。 -
@NicholasHunter 为什么? OP 从上下文中获取实体。做出改变。并致电
Save -
@NicholasHunter,你必须重新学习 EF。无需调用
Update来更新数据库中的实体。 Change Tracker 将检测到对象的新值与FindAsync调用后不同,并仅自动更新需要的字段。
标签: c# asp.net visual-studio linq .net-framework-4.8