Синхронизация базы данных мобильного приложения службы приложений Azure завершается сбоем, если данные удаляются

В настоящее время я сталкиваюсь с такой проблемой: я создаю приложение, используя Xamarin и мобильное приложение службы приложений Azure в качестве облачной серверной части. Дело в том, что если я удалю некоторые данные из соответствующей таблицы в БД, размещенной в Azure, следующий вызов PullAsync на мобильном устройстве завершится ошибкой, потому что он попытается запросить удаленную запись. Есть ли способ синхронизировать удаление записей, которое сначала происходит в базе данных Azure, а затем извлекается на устройство?

Другой способ работает без проблем: если я удаляю запись с устройства, соответствующая запись удаляется в БД Azure.


person Andrew Nikolin    schedule 25.12.2016    source источник


Ответы (1)


Вы должны использовать обратимое удаление, включив его на своем сервере для каждого TableController, где вам это нужно. Пример здесь для TodoItem TableController.

protected override void Initialize(HttpControllerContext controllerContext)
{
    base.Initialize(controllerContext);
    MobileServiceContext context = new MobileServiceContext();
    DomainManager = new EntityDomainManager<TodoItem>(context, Request, enableSoftDelete: true);
}

Подробнее здесь .

person François    schedule 25.12.2016
comment
Вчера точно так же думал, но надеялся, что есть какое-то решение с реальным удалением записи. Хорошо, отмечу это как ответ, спасибо! - person Andrew Nikolin; 26.12.2016
comment
У меня есть еще один вопрос, связанный с этим: в классе EntityData я нашел существующее свойство с именем Deleted, которое, я полагаю, можно использовать для мягкого удаления. Проблема в том, что когда я обновляю его значение на мобильном клиенте, оно не передается в Azure, а при следующем извлечении оно переписывается в исходное значение false. Есть ли способ использовать его, или я должен создать какой-то пользовательский столбец? - person Andrew Nikolin; 26.12.2016
comment
Я только что обнаружил, что UpdateAsync по какой-то причине не записывает Deleted true в локальное хранилище устройства, поэтому он не синхронизируется с Azure. Не найду решения этой проблемы - person Andrew Nikolin; 26.12.2016
comment
Я отредактировал свой ответ, чтобы показать, как включить обратимое удаление. - person François; 26.12.2016
comment
О, большое спасибо! Так, собственно, мой трюк с обновлением самого свойства на устройстве вообще не работает? Клиентский API просто игнорирует это? - person Andrew Nikolin; 26.12.2016