我正在尝试使用azure mobile C ++标头中的“更新”功能更新我的一个Azure Mobile表中的记录。但我得到一个例外。以下是我的代码:
void DBUtils::DBQuestion::UpdateQuestionInTable(std::shared_ptr<azure::mobile::table> table)
{
auto obj = json::value::object();
obj[U("id")] = json::value::string(ID);
obj[U("QuestionText")] = json::value::string(QuestionText);
obj[U("AnswerLatitude")] = json::value::number(AnswerLatitude);
obj[U("AnswerLongitude")] = json::value::number(AnswerLongitude);
table->update(obj);
}
我已经确认上面的ID是实际存在于表中的有效ID。类似的插入操作(不指定ID字段)实际上是成功的:
void DBUtils::DBQuestion::InsertIntoTable(std::shared_ptr<azure::mobile::table> table)
{
auto obj = json::value::object();
obj[U("QuestionText")] = json::value::string(QuestionText);
obj[U("AnswerLatitude")] = json::value::number(AnswerLatitude);
obj[U("AnswerLongitude")] = json::value::number(AnswerLongitude);
table->insert(obj);
}
我做错了什么?
答案 0 :(得分:3)
Azure Mobile最近更新了其表架构,以便Id字段现在是一个字符串,如果客户端未设置它,则由服务器使用Guid值填充。
此更改在C ++库中引入了一个错误。作为一种解决方法,您可以尝试调用另一个重载更新,即获取ID字符串和对象的重载。
void DBUtils::DBQuestion::UpdateQuestionInTable(utility::string_t id, std::shared_ptr<azure::mobile::table> table)
{
auto obj = json::value::object();
obj[U("QuestionText")] = json::value::string(QuestionText);
obj[U("AnswerLatitude")] = json::value::number(AnswerLatitude);
obj[U("AnswerLongitude")] = json::value::number(AnswerLongitude);
ID = id;
table->update(ID, obj);
}