Как работает Update в EFCore? [требует правки]

183
24 марта 2018, 13:59

Пытаюсь обновить значение в строке таблицы тремя разными способами, но по итогу ничего не меняется.

В контроллере получаю нужную строку из таблицы в виде объект класса-сущности.
Вношу необходимые изменения в объект и вызываю await repository.UpdateAsync(userRate);
В самом репозитории я вначале написал просто:

public async Task<UserRate> UpdateAsync(UserRate userRate)
{
    context.UserRates.Update(userRate);
    await context.SaveChangesAsync();
    return userRate;
}

Никаких изменений в БД не произошло. Данные получаются корректно, ибо этот же контроллер добавляет новую строку, если не найдёт нужной. И создание новой строки проходит нормально. Проблема именно с обновлением существующей.

public async Task<UserRate> UpdateAsync(UserRate userRate)
{
    context.UserRates.Attach(userRate);
    var entry = context.Entry(userRate);
    entry.Property(e => e.Score).IsModified = true;
    entry.Property(e => e.Review).IsModified = true;
    await context.SaveChangesAsync();
    return userRate;
}

Аналогично ничего не изменилось.
Попробовал ещё:

public async Task<UserRate> UpdateAsync(UserRate userRate)
{
    context.Attach(userRate).State = EntityState.Modified;
    await context.SaveChangesAsync();
    return userRate;
}

Тоже ничего не дало.

Я что-то не понимаю в работе метода Update контекста? Как обновить данные в существующей строке.

И ещё, в консоли выходит вот такой SQL запрос, который намекает, что вроде как UPDATE к БД идёт, но видимо данные почему-то в сущности не меняются.

UPDATE "UserRates" SET "review" = @p0, "score" = @p1, "title_id" = @p2, "user_id" = @p3
WHERE "id" = @p4;

Метод котроллера:

[HttpPost]
public async Task<IActionResult> Rate([FromBody] RateViewModel model)
{
    var user = await userManager.GetUserAsync(HttpContext.User);
    if (user == null) { return Unauthorized(); }
    if (model == null) { return NotFound(); }
    UserRate userRate = await repository.GetUserRateByUserAndTitleAsync(user.Id, model.TitleId);
    if (userRate == null || userRate?.Id == 0)
    {
        await repository.AddAsync(user.Id, model.TitleId, model.Score);
    }
    else
    {
        await repository.UpdateAsync(userRate);
    }
    return NoContent();
}
READ ALSO
Patience Sort реализация C#

Patience Sort реализация C#

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

285
Добавление новых строк в DataGridView

Добавление новых строк в DataGridView

WinFormЕсть DataGridView не привязаный к DataSource

193
Запуск программы начиная со 2 формы

Запуск программы начиная со 2 формы

Как переиначить проект, чтобы при старте программы изначально запускалась вторая форма вместо первойЯ не хочу вызвать вторую из первой и первую...

238