Entity Framework API Put метод, только обновить один столбец - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Entity Framework API и пытаюсь обновить только один столбец, используя метод Put ...

[ResponseType(typeof(void))]
        [Authorize]
        public IHttpActionResult PutLCTimeSlots(int id, LCTimeSlots lCTimeSlots)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != lCTimeSlots.id)
            {
                return BadRequest();
            }

            db.Entry(lCTimeSlots).State = EntityState.Modified;


            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!LCTimeSlotsExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }

Мой вопрос, что мне нужно изменить в этом методе, чтобы обновить только одинколонка?

Я пытался заменить db.Entry(lCTimeSlots).State = EntityState.Modified; на db.Entry(lCTimeSlots).Property(x => x.taken).IsModified = true; Но это не сработало .... у кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я начну с предложения использовать глагол PATCH, если вы хотите изменить только определенные свойства.

Кроме того, не стоит принимать объект сущности от клиента, вместо этого принимать объект моделион имеет только те свойства, которые вы хотите изменить с помощью этого метода.

Наконец, убедитесь, что сущность существует до того, как попытается внести какое-либо изменение.

Теперь сделайте что-нибудькак это:

        var timeSlot = db.LCTimeSlots.SingleOrDefault(e => e.Id == model.Id);

        if (timeSlot != null)
        {
            db.Entry(timeSlot).CurrentValues.SetValues(model);
            db.SaveChanges();
        }
        else
        {
            //404
        }
0 голосов
/ 19 сентября 2018

Не следует использовать значение по умолчанию PUT для такой операции, поскольку это означает, что клиент должен иметь возможность обновлять более одного свойства.Я бы предложил операцию PUT с использованием маршрута, который описывает обновляемое свойство с параметром типа свойства вместо объекта LCTimeSlots:

[HttpPut( "{id}/yourProperty" )]
[Authorize]
public IHttpActionResult YourProperty( int id, TypeOfProperty yourProperty )
{
    // validate value of `yourProperty` if you can before loading entity from DB

    // load entity from DB
    var loadedEntity = dbContext.Set<LCTimeSlots>().Find( id );

    // if not found, 404 it

    // update property, e.g.: 
    loadedEntity.YourProperty = yourProperty;

    // validate entity in its entirety if necessary

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