[英]How can I validate all fields when I need to update a record in LinQ C# .Net Framework?
我正在使用 C# .NET 框架,我需要知道如何驗證我需要更新的所有字段,例如,我有一個包含四個字段的表,所以,如果用戶只需要更改一個字段,如何我只更新那個字段,實際上我有這個代碼:
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);
明確地。 EF 將自動檢測 object 中的更改並僅更新所需的字段。 所以只需為 DbContext 調用SaveChanges
,ChangeTracker 就會發現哪些屬性發生了變化。
另一方面,EF 的 CRUD 場景並不是性能最優的。 在這里,您有兩個數據庫往返,您必須在事務中明確地覆蓋它們: FindAsync
和SaveChanges
。
不那么“可愛”但有效的是使用分離的實體:
public async Task<ServiceResponse<User>> UpdateUser(User newUserUpdate)
{
ServiceResponse<User> serviceResponse = new();
if (newUserUpdate.userName != null) ||
newUserUpdate.email != null) ||
newUserUpdate.password != null)
{
_dataContext.Users.Attach(newUserUpdate);
var entry = _dataContext.Entry(newUserUpdate);
if (newUserUpdate.userName != null) entry.Property(x => x.userName).IsModified = true;
if (newUserUpdate.email != null) entry.Property(x => x.email).IsModified = true;
if (newUserUpdate.password != null) entry.Property(x => x.password).IsModified = true;
await _dataContext.SaveChangesAync();
}
serviceResponse.Message = "Usuario Actualizado Exitosamente";
return serviceResponse;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.