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