更新 IMobileServiceSyncTable

Updating a IMobileServiceSyncTable

我正在将 Azure Easy Tables 与我的 Xamarin.Forms 应用程序集成,目前它正在运行。我可以毫无问题地在我的 Azure table 上执行 GET 和 POST。但是,如何更新本地 MobileServiceSyncTable 中的现有项目并将其推送到云端?

出于测试目的,我创建了一个名为 Person 的简单 Model,它具有一些标准属性,例如 FirstName 等。现在,我想做的是,很简单,更新一个人 FirstName 属性。到目前为止,这是我的——显然失败了——尝试:

public async Task PatchPerson(string id)
{
    await Initialize();

    var person = personTable.Where(p => p.Id == id);

    person.Firstname = 'Something else';

    await personTable.UpdateAsync(person); // error here

    await SyncPeople();
 }

试图将此 var 传递给 UpdateAsync() 时,IntelliSense 通知我一个错误:

Cannot convert from 'Microsoft.WindowsAzure.MobileServices.IMobileServiceTableQuery' to 'Models.Person'>

很好。所以我像这样投射对象,这消除了错误:

public async Task PatchPerson(string id)
{
   await Initialize();

   var person = (Person)personTable.Where(p => p.Id == id); //cast

   person.Firstname = "Something else";

   await personTable.UpdateAsync(person); // no error here

   await SyncPeople();
}

现在,当我编译 运行 这段代码时,程序崩溃并显示以下错误消息:

[0:] Error adding person. Error message: Specified cast is not valid.

我哪里做错了,我该如何做对?

好的,所以我找到了绕过它的方法。

我实现了一个新方法

public async Task<Person> GetPerson(string id)
{
    await Initialize();

    return await personTable.LookupAsync(id);
}

然后像这样更新我的 PatchPerson() 方法:

public async Task PatchPerson(string id)
{
    await Initialize();

    var person = await GetPerson(id);

    person.Age += 1;

    await personTable.UpdateAsync(person);

    await SyncPeople();
}

ViewModel 我现在可以 return 来自我的 Azure Easy Table 的这个 Person 对象:

var person = await azureMobileService.GetPerson("C3EC52BE-6FAF-490C-A78F-7AB50F796311");

然后我可以将这个对象传递给我的新 PatchPerson() 方法:

await azureMobileService.PatchPerson(person.Id);

这成功更新了我的 Azure 后端中正确的 Person 对象,并且更改反映在我的应用程序中。