【问题标题】:query soft deleted records in an Azure mobile app easy table在 Azure 移动应用简易表中查询软删除记录
【发布时间】:2017-10-21 00:11:56
【问题描述】:

我有一个 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; }
}

我错过了什么?谢谢。

【问题讨论】:

    标签: sqlite azure xamarin soft-delete


    【解决方案1】:

    根据我的理解,您可以尝试如下更改您的 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 数据库并验证您的表记录以缩小此问题的范围。

    【讨论】:

    • 这给出了_deleted不能用作参数的错误。我开始看到问题是我想做的事情不能用同步表完成,即离线同步。这不是一个真正的问题。我将不得不使用 IMobileServiceTable 直接从服务器获取已删除的项目,然后取消删除我想要取消删除的项目并重新同步同步表以在我的应用程序中查看它们。我是这个应用程序编程的新手,我会很感激我走在正确的轨道上,以及一些使用 IMobileServiceTable 对象获取和更新记录的代码示例..
    【解决方案2】:

    执行此操作的方法是使用 IMobileServiceTable 对象直接访问服务器。这很简单。然后,您可以在查询中使用 IncludeDeleted 指令。案件已解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 2023-03-26
      • 2010-09-09
      • 2020-01-11
      • 1970-01-01
      相关资源
      最近更新 更多