2009-06-18 4 views
0

У меня есть этот код:Linq к Entities - Приращение столбец с использованием первичного ключа

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

ответ

0

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

1

Поскольку 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 КЕД для вас, один для каждого обновления, вставки и/или удаления.

+0

Да, ответ будет решить указанную проблему, однако он может потенциально потерпеть неудачу при работе с одновременными пользователями, обновляющими ту же информацию. –

+0

Да, но я не хочу делать Select = / –