我正在将Azure Easy Tables与我的Xamarin.Forms应用程序集成,到目前为止,它已经可以工作了。我可以在Azure表上执行GET和POST,而不会出现任何问题。但是,如何更新本地MobileServiceSyncTable
中的现有项目并将其推送到云中?
出于测试目的,我创建了一个名为Model
的简单Person
,它具有一些标准属性,例如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();
}
IntelliSense在尝试将此var
传递给UpdateAsync()
时通知我一个错误:
无法从“ Microsoft.WindowsAzure.MobileServices.IMobileServiceTableQuery”转换为“ 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:]添加人员时出错。错误消息:指定的转换无效。
我做错了什么,我该怎么做对呢?
答案 0 :(得分:0)
好的,所以我找到了解决它的方法。
我实现了一种新方法
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
的Azure Easy Table中返回此Person
对象:
var person = await azureMobileService.GetPerson("C3EC52BE-6FAF-490C-A78F-7AB50F796311");
然后我可以将此对象传递给新的PatchPerson()
方法:
await azureMobileService.PatchPerson(person.Id);
这成功更新了Azure后端中正确的Person
对象,并且更改反映在我的应用程序中。