2010-03-11 2 views
0

Я пытаюсь увеличить поле в базе данных MySQL, используя SubSonic 3 ActiveRecord. В SQL, это то, что я после:Атомно увеличивайте поле с помощью SubSonic 3 ActiveRecord

UPDATE people SET messages_received=messages_received+1 WHERE [email protected]_to; 

Я попытался следующие, но это, похоже, не работает (messages_received всегда казалось 1):

_db.Update<person>() 
    .Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1) 
    .Where(x => x.people_id == idTo) 
    .Execute(); 

Это сделал работу :

string sql="UPDATE people SET messages_received=messages_received+1 WHERE [email protected]_to"; 
var q=new SubSonic.Query.QueryCommand(sql, _db.Provider); 
q.AddParameter("id_to", idTo); 
q.Provider.ExecuteQuery(q); 

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

Ответить. Для справки, на основании предложения Роба ниже ::

_db.Update<person>() 
    .SetExpression("messages_received").EqualTo("messages_received+1") 
    .Where<person>(x=>x.people_id==idTo) 
    .Execute(); 

ответ

1

Вы можете использовать старый инструмент запроса для этого и использовать «SetExpression»:

db.Update("MyTable") 
    .SetExpression("messages_received +1") 
    .Where("people_id") 
    .IsEqualTo(1) 
    .Execute(); 

Вот freehanded - но, надеюсь, вы получите идею :)

+0

Прохладный, спасибо Роба, да, идея появилась, опубликовал рабочую версию выше. –

Смежные вопросы