簡體   English   中英

當我需要更新 LinQ C#.Net Framework 中的記錄時,如何驗證所有字段?

[英]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 場景並不是性能最優的。 在這里,您有兩個數據庫往返,您必須在事務中明確地覆蓋它們: FindAsyncSaveChanges

不那么“可愛”但有效的是使用分離的實體:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM