我正在研究这个示例: https://learn.microsoft.com/en-us/azure/developer/mobile-apps/azure-mobile-apps/quickstarts/xamarin-forms/offline?pivots=vs2022-windows 它有效,我可以添加和编辑记录,并且它已正确同步到云,当我在第二台设备上刷新时,更改会正确更新。
现在我也想删除记录,所以我在示例代码中添加了一个删除按钮,按下时称为:
await _service.RemoveItemAsync(item);
这也有效,记录会从离线数据库和云端删除。
不幸的是,在第二台设备上,当我单击刷新按钮时,已删除的记录仍然存在。它不会从离线数据库中删除。我必须清除离线数据库,然后才能正确同步。
这是刷新按钮上的代码:
public async Task RefreshItemsAsync()
{
await InitializeAsync();
// First, push all the items in the table.
await _table.PushItemsAsync();
// Then, pull all the items in the table.
await _table.PullItemsAsync();
}
第二台设备上是否还需要执行任何其他操作才能删除已删除的记录?
我发现有关此内容的旧帖子说我们必须启用软删除,但这在当前的移动应用程序中似乎不再存在?
软删除仍然存在于当前的 Azure 移动应用程序库中。您可以在表选项中启用它 - 如下所示:
[Route("tables/soft")]
[ExcludeFromCodeCoverage(Justification = "Test suite")]
public class SoftController : TableController<EFMovie>
{
public SoftController(MovieDbContext context) : base()
{
Repository = new EntityTableRepository<EFMovie>(context);
Options = new TableControllerOptions
{
EnableSoftDelete = true
};
}
}
这实际上来自源代码中的一个测试用例。一旦您启用软删除并删除一些项目(只有启用软删除后启用的项目才会受到影响),删除内容将在同步时传播到第二台设备。