在 Azure 移动应用程序中轻松查询软删除记录 table

query soft deleted records in an Azure mobile app easy table

我有一个 Azure 移动 Easy Table Xamarin 应用程序,它是一堆列表,我自己的提醒。它可以很好地添加、更新和删除。我希望能够获得软删除项目的列表,这样我就可以取消删除一些项目,将它们重新添加到列表中而无需重新输入。我不知道该怎么做。我在 Google 中看到搜索了一个 IncludeDeleted 属性,但它似乎不适用于我正在使用的 IMobileServiceSyncTable table。这是代码,但它检索了零条记录。如果我 运行 它在 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;

    }

这里是 Class:

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; }
}

我错过了什么?谢谢

据我了解,您可以尝试如下更改 SyncItems 方法:

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

并且您可以在调用上述方法时使用fiddler捕获网络痕迹,然后您可以检查响应并确定是否可以检索已删除的项目。

然后您可以利用 DB Browser for SQLite 或任何其他工具来检查您的本地 SQLite 数据库并验证您的 table 记录以缩小此问题的范围。

执行此操作的方法是使用 IMobileServiceTable 对象直接转到服务器。这很简单。然后您可以在查询中使用 IncludeDeleted 指令。破案了。