在Azure移动应用程序简易表中查询软删除的记录

时间:2017-10-20 01:57:47

标签: sqlite azure xamarin soft-delete

我有一个Azure移动Easy Table Xamarin应用程序,它是一堆列表,为我自己提醒。它可以正常添加,更新和删除。我希望能够获得软删除项目的列表,以便我可以取消删除一些将它们添加回列表而无需重新输入。我无法弄清楚如何做到这一点。我在谷歌搜索中看到一个IncludeDeleted属性,但它似乎不适用于我正在使用的IMobileServiceSyncTable表。这是代码,但它检索零记录。如果我在LinqPad 5中运行它,我将获得所有软删除的记录。

...

        @yield('content')

    </div>

    {{-- Scripts --}}
    <script src="{{ asset('theme/js/jquery-3.1.1.min.js') }}"></script>
    <script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
    <script src="{{ asset('theme/js/bootstrap.min.js') }}"></script>
    <script src="{{ asset('js/app.js') }}"></script>
    <script src="{{asset('theme/js/select2.min.js')}}"></script>

    @yield('footer_scripts')

</body>

这是班级:

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;

    }

我错过了什么?感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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