Задать вопрос
@Matsun

Как с помощью Entity Framework модифицировать только одно поле элемелнта?

Есть метод
public void IncreaseArticleViews(int ArticleId)
        {
            context.Articles.FirstOrDefault(p => p.ArticleId == ArticleId).CountViews += 1;
            context.SaveChanges();
        }


Стоит задача - модифицировать только одно свойство статьи - надо увеличить число промотров статей CountViews на единицу.
Проблема заключается в том, что этот метод не только сохраняет обновлённое свойство CountViews в БД, но и все остальные.

Как мне обновить в БД только одну ячейку? Не загружаю всю строку целиком.
  • Вопрос задан
  • 562 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
var article = context.Articles.FirstOrDefault(p => p.ArticleId == ArticleId);
int countViews = article.newCountViews++;
context.Database.ExecuteSqlCommand("UPDATE dbo.Articles SET CountViews = {0} WHERE ArticleId = {1}", countViews , ArticleId);
Ответ написан
Можно и без прямого применения Sql
var article = context.Articles.FirstOrDefault(p => p.ArticleId == ArticleId);
context.Entry(article).Property<int>("CountViews").CurrentValue++;
context.Entry(article).Property<int>("CountViews").IsModified = true;
context.SaveChanges();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Newred
Я бы дополнил ответ от Анвар Шахмаев @pro100gram

Зачем нам загружать с базы весь объект, загружайте только счётчик)
Вместо:
var article = context.Articles.FirstOrDefault(p => p.ArticleId == ArticleId);

Сделал бы:
var article = context.Articles.FirstOrDefault(p => p.ArticleId == ArticleId).Select(p => p.CountViews);
int countViews = article++;
context.Database.ExecuteSqlCommand("UPDATE dbo.Articles SET CountViews = {0} WHERE ArticleId = {1}", countViews , ArticleId);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы