2010-03-11 5 views
0

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(); 

Répondre

1

Vous pouvez utiliser l'ancien outil de requête pour cela et utiliser « SetExpression »:

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

C'est deux mains lâchées - mais nous espérons que vous avez l'idée :)

+0

Cool, merci Rob, j'ai eu l'idée, posté la version de travail ci-dessus. –

Questions connexes