更新 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
对象,并且更改反映在我的应用程序中。
我正在将 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
对象,并且更改反映在我的应用程序中。