【问题标题】:Atomically increment a field using SubSonic 3 ActiveRecord使用 SubSonic 3 ActiveRecord 原子地增加一个字段
【发布时间】:2010-03-11 23:19:42
【问题描述】:

我正在尝试使用 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();

【问题讨论】:

    标签: activerecord subsonic subsonic3 subsonic-active-record


    【解决方案1】:

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

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

    这是徒手写的 - 但希望你能明白:)

    【讨论】:

    • 酷,谢谢 Rob,是的,明白了,在上面发布了工作版本。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多