我正在尝试更新桌面上的两个字段。我尝试了几件事,但我尝试的更新影响了其他领域。这是我的代码:
// Updates a row in the PatientSession table. Note that this call updates
public string UpdateEndPatientSession(PatientSession p)
{
// Update fields I set but reset data other fields
_dbConnection.Update<PatientSession>(p);
// Rename all fields of the column
_dbConnection.UpdateOnly(new PatientSession { Id = p.Id, PatientEndSessionTime = p.PatientEndSessionTime, PatientEndSessionByUserId = p.PatientEndSessionByUserId }, (PatientSession patient) => new { patient.Id, patient.PatientEndSessionTime, patient.PatientEndSessionByUserId });
_dbConnection.Update<PatientSession>(new { PatientSessionId = 10, PatientEndSessionTime = sessiontime, PatientEndSessionByUserId = 159 });
string IdInsert = "{\"PatientSessionId\":" + p.Id + "}";
return IdInsert;
}
我按照ServiceStack tutorial上的说明操作,但我无法使其正常工作。我不理解如何更新行而不选择具有主ID的行。
我尝试了一个基本的SQL请求,但得到了SQLiteException
:
string patientendsessiontime = p.PatientEndSessionTime.ToString();
string patientendsessionbyuserid = p.PatientEndSessionByUserId.ToString();
string patientsessionid = p.Id.ToString();
string SQLraw = "UPDATE PatientSession SET PatientEndSessionTime = " + patientendsessiontime + ", PatientEndSessionByUserId = " + patientendsessionbyuserid + " WHERE PatientSessionId = " + patientsessionid + "";
_dbConnection.ExecuteSql(SQLraw);
我只想进行部分更新。
答案 0 :(得分:3)
您需要在WHERE
语句中指定UpdateOnly
子句。
public string UpdateEndPatientSession(PatientSession p)
{
_dbConnection.UpdateOnly(
p,
onlyFields: ps => new { ps.PatientEndSessionTime, ps.PatientEndSessionByUserId },
where: ps => ps.Id == p.Id
);
...
语法:
_dbConnection.UpdateOnly(
p, // The source data object
onlyFields: ps => ... , // The fields you want from the source data object
where: ps => ... // The record match condition
);
有关更多示例,请参阅update documentation。
顺便说一句,我看到你返回一个string
类型,然后构建一个JSON响应:
string IdInsert =&#34; {\&#34; PatientSessionId \&#34;:&#34; + p.Id +&#34;}&#34;
您知道吗您可以简单地将回报设置为object
,然后执行:
return new { PatientSessionId = p.Id };
对我来说,你不想自己处理JSON序列化。
答案 1 :(得分:0)
好的,我找到了SQLite表达式的解决方案:
string patientendsessiontime = p.PatientEndSessionTime.ToString();
string patientendsessionbyuserid = p.PatientEndSessionByUserId.ToString();
string patientsessionid = p.Id.ToString();
string SQLraw = "UPDATE PatientSession SET PatientEndSessionTime = '" + patientendsessiontime + "', PatientEndSessionByUserId = " + patientendsessionbyuserid + " WHERE Id = " + patientsessionid + "";
_dbConnection.ExecuteSql(SQLraw);
我在语法方面犯了错误,但是如果有人有另一个例子而不是文档,我仍然不知道如何使用匿名函数,我确信它不是非常有用的:)