Je suis impatient d'incrémenter un champ dans une base de données MySQL en utilisant SubSonic 3 ActiveRecord. Dans SQL, ce que je suis après:Incrémenter un champ de manière atomique en utilisant SubSonic 3 ActiveRecord
UPDATE people SET messages_received=messages_received+1 WHERE [email protected]_to;
J'ai essayé ce qui suit, mais il ne semble pas fonctionner (messages_received semblait toujours être 1):
_db.Update<person>()
.Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1)
.Where(x => x.people_id == idTo)
.Execute();
Ce travail a fait :
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);
J'ai une solution, mais je me demande s'il est possible de le faire sans avoir recours à SQL ordinaire?
Réponse. Pour référence, basé sur la suggestion de Rob ci-dessous ::
_db.Update<person>()
.SetExpression("messages_received").EqualTo("messages_received+1")
.Where<person>(x=>x.people_id==idTo)
.Execute();
Cool, merci Rob, j'ai eu l'idée, posté la version de travail ci-dessus. –