Subsonic 3 activerecord를 사용하여 필드를 원자 적으로 증분합니다
-
19-09-2019 - |
문제
나는 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();
해결책
이를 위해 기존 쿼리 도구를 사용하고 "setexpression"을 사용할 수 있습니다.
db.Update("MyTable")
.SetExpression("messages_received +1")
.Where("people_id")
.IsEqualTo(1)
.Execute();
그것은 프리 핸드입니다. 그러나 당신은 아이디어를 얻기를 바랍니다. :)
제휴하지 않습니다 StackOverflow