更新C ++ Azure Mobile Library中的功能

时间:2014-01-02 22:07:43

标签: c++ windows-8 windows-runtime azure-mobile-services

我正在尝试使用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);
}

我做错了什么?

1 个答案:

答案 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);
}