Atomar inkrementieren ein Feld unter Verwendung Active SubSonic 3
-
19-09-2019 - |
Frage
Ich bin Tring ein Feld in einer MySQL-Datenbank mit SubSonic 3 Active zu erhöhen. In SQL ist das, was ich nach:
UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to;
ich folgendes probiert, aber es schien nicht zu Arbeit (messages_received immer zu sein schien 1):
_db.Update<person>()
.Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1)
.Where(x => x.people_id == idTo)
.Execute();
Das hat funktioniert:
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);
Also habe ich eine Lösung, aber ich frage mich nur, ob es möglich ist, dies zu tun, ohne zu Ebene SQL zurückgreifen?
Antwort. Als Referenz basierend auf Robs Vorschlag unter ::
_db.Update<person>()
.SetExpression("messages_received").EqualTo("messages_received+1")
.Where<person>(x=>x.people_id==idTo)
.Execute();
Lösung
Sie können das alte Abfrage-Tool für diesen Einsatz und die Verwendung „SetExpression“:
db.Update("MyTable")
.SetExpression("messages_received +1")
.Where("people_id")
.IsEqualTo(1)
.Execute();
Das ist freihändig - aber hoffentlich Sie auf die Idee:)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow