Atómicamente incrementar un campo utilizando SubSonic 3 ActiveRecord
-
19-09-2019 - |
Pregunta
Estoy Tring para incrementar un campo en una base de datos MySQL utilizando SubSonic 3 ActiveRecord. En SQL, esto es lo que busco:
UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to;
He intentado lo siguiente, pero no parece funcionar (messages_received siempre parecía estar 1):
_db.Update<person>()
.Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1)
.Where(x => x.people_id == idTo)
.Execute();
Este trabajo lo hizo:
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);
Así que tengo una solución, pero me pregunto si es posible hacer esto sin tener que recurrir a SQL sin formato?
respuesta. A modo de referencia, en base a la sugerencia de Rob continuación ::
_db.Update<person>()
.SetExpression("messages_received").EqualTo("messages_received+1")
.Where<person>(x=>x.people_id==idTo)
.Execute();
Solución
Puede utilizar la herramienta de consulta viejo para esto y utilizar "SetExpression":
db.Update("MyTable")
.SetExpression("messages_received +1")
.Where("people_id")
.IsEqualTo(1)
.Execute();
Eso freehanded - pero espero que usted consigue la idea:)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow