在 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 指令。破案了。
我有一个 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 指令。破案了。