Атомное увеличение поля с помощью SubSonic 3 ActiveRecord - PullRequest
1 голос
/ 12 марта 2010

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

UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_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 people_id=@id_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 Ответ

2 голосов
/ 12 марта 2010

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

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

Это от руки - но, надеюсь, вы поняли:)

...