редактировать только измененные или упомянутые значения с помощью ядра платформы сущностей - PullRequest
1 голос
/ 16 апреля 2019

Мне нужно обновить только упомянутые поля в теле запроса put, текущая проблема заключается в том, что все значения, которые не упомянуты в обновляемой сущности, установлены в null ниже приведена моя текущая реализация обновления в общем хранилище.

    public virtual void Update(T entity)
    {
        Context.Attach(entity);
        Context.Entry(entity).State = EntityState.Modified;
    }

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Вам нужно два разных шага.Сначала вы должны выполнить операцию исправления. Описание здесь

public IActionResult PatchEntity(int id, [FromBody] JsonPatchDocument<Entity> patchdoc)
{
    var entity = dbContext.Entities.Find(e=>e.Id == id);
    patchdoc.ApplyTo(entity);
    dbContext.Update(entity);
    return Ok(entity);
}

Вот метод для частичного обновления БД ( также посмотрите на этот вопрос ):

public virtual void Update(params object[] keys, T entity)
{
    var current = Context.Entities.Find(keys);
    Context.Entry(entity).CurrentValues.SetValues(entity);
    Context.SaveChanges();
}

Если вам не нужно частично обновлять запись базы данных, у вас все в порядке:

public virtual void Update(T entity)
{
    Context.Update(entity); // entity is attached by default after select of entity
    Context.SaveChanges();
}
1 голос
/ 18 апреля 2019

наконец-то разобрался, даже не меняя хранилище я просто добавил конфигурацию в конфигурационном файле automapper, чтобы игнорировать любое нулевое значение

CreateMap<TeamDto, Team>().ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));
1 голос
/ 16 апреля 2019

Что вы можете сделать, это получить сущность перед ее обновлением:

  1. Получите вашу сущность из вашего контекста
  2. Обновите поля вашей сущности с данными из вашей модели. Вы можете использовать такие инструменты, как Automapper для достижения этой цели в чистом виде.
  3. Затем вызовите метод Update для сущности

Другим способом было бы проверить состояние каждого поля, например, в этот ответ .

РЕДАКТИРОВАТЬ Точка обновления 2.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...