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

У меня есть мобильное приложение Azure Easy Table Xamarin, которое представляет собой кучу списков, напоминаний для себя. Он отлично работает, чтобы добавить, обновить и удалить. Я хочу иметь возможность получить список обратимо удаленных элементов, чтобы я мог восстановить некоторые из них, чтобы добавить их обратно в список, не вводя их повторно. Я не могу понять, как это сделать. Я вижу в поиске Google атрибут IncludeDeleted, но, похоже, он не применяется к таблице IMobileServiceSyncTable, которую я использую. Вот код, но он извлекает нулевые записи. Если я запускаю его в LinqPad 5, я получаю все мягко удаленные записи.

public async Task<IEnumerable<ListData>> GetDeletedItemsAsync()
    {
        await InitializeClient();
        await SyncItems();

        try
        { 
            IEnumerable<ListData> items = await listdata
                .Where(listdata => listdata.Deleted == true )
                .ToEnumerableAsync();

            return new ObservableCollection<ListData>(items);
        }
        catch (MobileServiceInvalidOperationException msioe)
        {
            Debug.WriteLine(@"Invalid sync operation: {0}", msioe.Message);
        }
        catch (Exception e)
        {
            Debug.WriteLine(@"Sync error: {0}", e.Message);
        }
        return null;

    }

Вот класс:

public class ListData
{
    public string id { get; set; }
    [JsonProperty(PropertyName = "listname")]
    public string ListName { get; set; }
    [JsonProperty(PropertyName = "itemdata")]
    public string ItemData { get; set; }
    [JsonProperty(PropertyName = "itemdetail")]
    public string ItemDetail { get; set; }
    [JsonProperty(PropertyName = "deleted")]
    public Boolean Deleted { get; set; }
    // *** Enable Optimistic Concurrency *** //
    [Version]
    public string Version { get; set; }
}

Что мне не хватает? Спасибо.


person Robertb    schedule 20.10.2017    source источник


Ответы (2)


Насколько я понимаю, вы можете попробовать изменить свой метод SyncItems следующим образом:

private async Task SyncItems()
{
    var queryName = $"incsync:s:{typeof(ListData).Name}";
    var query = listDataTable.CreateQuery().IncludeDeleted();
    await listDataTable.PullAsync(queryName, query);
}

И вы можете использовать fiddler для захвата трассировки сети при вызове вышеуказанного метода, затем вы можете проверить ответ и выяснить, можете ли вы восстановить удаленные элементы.

Затем вы можете использовать Браузер БД для SQLite или любой другой инструмент для проверки вашей локальной базы данных SQLite и проверки записей таблицы, чтобы сузить Эта проблема.

person Bruce Chen    schedule 20.10.2017
comment
Это дает ошибку, что _deleted нельзя использовать в качестве параметра. Я начинаю понимать, что проблема в том, что то, что я хочу сделать, нельзя сделать с синхронизированной таблицей, т.е. с синхронизацией в автономном режиме. Это не проблема. Мне придется использовать IMobileServiceTable, чтобы получить удаленные элементы непосредственно с сервера, затем восстановить элементы, которые я хочу восстановить, и повторно синхронизировать синхронизированную таблицу, чтобы просмотреть их в моем приложении. Я новичок в программировании этого приложения и был бы признателен за подтверждение того, что я на правильном пути, и за образец кода для получения и обновления записей с использованием объекта IMobileServiceTable‹T›. - person Robertb; 20.10.2017

Это можно сделать, обратившись непосредственно к серверу с помощью объекта IMobileServiceTable. Это довольно просто. Затем вы можете использовать директиву IncludeDeleted в запросе. Дело раскрыто.

person Robertb    schedule 20.10.2017