Обновление IMobileServiceSyncTable - PullRequest
0 голосов
/ 23 мая 2019

Я интегрирую Azure Easy Tables с моим приложением Xamarin.Forms, и пока оно работает.Я могу делать GET и POST на своей таблице Azure без каких-либо проблем.Однако, как мне обновить существующий элемент в моем локальном 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»>

Fine.Поэтому я приведу объект примерно так, что удаляет ошибку:

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:] Ошибка при добавлении человека.Сообщение об ошибке: Указанное приведение неверно.

Что я делаю не так, и как я делаю это правильно?

1 Ответ

0 голосов
/ 23 мая 2019

Хорошо, так что я нашел способ обойти это.

Я реализовал новый метод

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 Теперь я могу вернуть этот Person объект из моей простой таблицы Azure:

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

И тогда я могу передать этот объект моему новому PatchPerson() методу:

await azureMobileService.PatchPerson(person.Id);

Это успешно обновляет правильный Person объект в моем бэкэнде Azure, и изменения отражаются в моем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...