使用SubSonic 3 ActiveRecord以原子方式增加字段

时间:2010-03-11 23:19:42

标签: activerecord subsonic subsonic3 subsonic-active-record

我想使用SubSonic 3 ActiveRecord在MySQL数据库中增加一个字段。在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的情况下执行此操作?

答案。供参考,基于Rob的建议::

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

1 个答案:

答案 0 :(得分:2)

您可以使用旧的查询工具并使用“SetExpression”:

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

那是免费的 - 但希望你能得到这个想法:)