Как правильно обновить сущность в БД?

В общем, проект ASP.NET MVC с Entity Framework и есть некая сущность User, класс описывающий эту сущность выглядит так:

public class User
{
    [Key]
    public int Id { get; set; }
    public string? Name { get; set; }
    public string? Hobby { get; set; }
    public byte[]? SomeUserFileData { get; set; }
}

Для обновления есть форма (View):

@model User
<form method="post" class="row">
    <div class="form-floating py-1 col-6">
        <input asp-for="Id" class="form-control boarder-0 shadow" />
        <label asp-for="Id" class="ms-2 text-light"></label>
        <span asp-validation-for="Id" class="text-danger"></span>
    </div>
    <div class="form-floating py-1 col-4">
            <input asp-for="Name" class="form-control boarder-0 shadow" />
            <label asp-for="Name" class="ms-2 text-black-50"></label>
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div class="col-6 col-md-3">
        <button type="submit" class="btn btn-primary form-control">Update</button>
    </div>
</form>

Обновление происходит так:

_db.Users.Update(userObj);
_db.SaveChanges();

Объект userObj - это объект передаваемый в метод Update из POST запроса.

Вы можете заметить, что тут нет Input'a для User.Hobby и файла User.SomeUserFileData, так как мне, например, не нужно изменять User.Hobby и User.SomeUserFileData и поэтому эти поля будут тут лишними.

Модель валидацию не пройдет, так как не хватает полей, если же убрать валидацию, то в таком случае, при обновлении в БД (EF _db.Users.Update(userObj)) вместо User.Hobby и User.SomeUserFileData запишутся null значения. Если добавить скрытые input'ы, то для файла нужно будет все байты закидывать в строку? В общем выглядит это не очень.

Собственно вопрос, как лучше и более правильно (с точки зрения логики, ресурсов и EF) обновить лишь часть полей сущности в БД не делая кучу проверок и не получая заранее все поля редактируемой сущности из БД.


Ответы (0 шт):