Как правильно обновить сущность в БД?
В общем, проект 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) обновить лишь часть полей сущности в БД не делая кучу проверок и не получая заранее все поля редактируемой сущности из БД.