Linq to Entities - увеличить столбец с помощью первичного ключа - PullRequest
0 голосов
/ 18 июня 2009

У меня есть этот код:

    Message message = new Message();
    message.Id = 5;
    message.EntityKey = context.CreateEntityKey("MessageSet", entity);
    message.Votes++;
    context.Attach(entity);
    context.ObjectStateManager.GetObjectStateEntry(entity.EntityKey).SetModifiedProperty("Votes");
    Save();

Но, конечно, голоса инициализируются с 0.

Как можно сгенерировать что-то вроде

Update Messages set Votes=Votes+1 where Id = 5

?? Thx

Ответы [ 2 ]

1 голос
/ 18 июня 2009

Поскольку LINQ to Entities - это сопоставление OR, общая идея заключается в том, что вы сначала запросите сущность или сущности, которые необходимо обновить, обновите их объектами в коде и выполните команду Update для ObjectContext, чтобы сохранить изменения для этих лиц. Это ключевая вещь, но зачастую ее трудно понять на раннем этапе, но причина использования ORM, такого как Entity Framework, NHibernate, LINQ to SQL и т. Д., Состоит в том, чтобы устранить необходимость в написании SQL и использовании объектов вместо этого.

Следующее должно быть то, что вам нужно:

Message msg = context.Messages.First(m => m.Id == 5);
msg.Votes += 1;

context.SaveChanges();

Вызов SaveChanges сгенерирует для вас операторы SQL CUD, по одному для каждого обновления, вставки и / или удаления.

0 голосов
/ 18 июня 2009

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

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