我们是否应该一直推送和拉出所有表格以进行离线snyc?

时间:2017-12-27 01:00:07

标签: xamarin xamarin.forms azure-mobile-services

我无法使用xamarin.forms了解azure移动离线同步的概念。我跟着this文章和样本。

1)据此,我必须推动所有更改并拉出所有表格。 看起来根据代码here

推送所有表
public async Task SyncOfflineCacheAsync()
        {
            Debug.WriteLine("SyncOfflineCacheAsync: Initializing...");
            await InitializeAsync();

            // Push the Operations Queue to the mobile backend
            Debug.WriteLine("SyncOfflineCacheAsync: Pushing Changes");
            await Client.SyncContext.PushAsync();

            // Pull each sync table
            Debug.WriteLine("SyncOfflineCacheAsync: Pulling tags table");
            var tagTable = await GetTableAsync<Tag>(); await tagTable.PullAsync();

            Debug.WriteLine("SyncOfflineCacheAsync: Pulling tasks table");
            var taskTable = await GetTableAsync<TodoItem>(); await taskTable.PullAsync();
        }

为什么我每次都要获得所有表格,这不是一项昂贵的操作吗?我调试了它,它总是在后端调用GetAll函数?这种用法有什么好处?

2)如果我只改变TodoItem的完成,我应该推送整个项目还是有办法只推送完整的Id信息?我在文档中读到它应该是可能的,但我无法找到它。

 public class TodoItem : TableData
    {
        public string Text { get; set; }

        public bool Complete { get; set; }

        public string TagId { get; set; }
    }

1 个答案:

答案 0 :(得分:1)

  

1)根据这一点,我必须推动所有更改并拉出所有表格。

正如How offline synchronization works所述,关于推送操作:

  

Push是对同步上下文的操作,并发送自上次推送以来的所有CUD更改。 请注意,无法仅发送单个表格的更改,因为否则可能会无序发送操作。 Push会对Azure Mobile App后端执行一系列REST调用,后端会修改您的服务器数据库。

对于Pull操作,您可以利用增量同步,这将在您本地SQLite表中存储的最新updatedAt时间戳之后检索记录。您可以遵循此issue的详细信息。此外,您可以按照adrian hall的书The Mobile Client中的查询管理部分进行操作。

  

2)如果我只改变TodoItem的完成,我应该推送整个项目还是有办法只推送完整的Id信息?

AFAIK,您无法实现此目的,因为客户端SDK会为您处理此处理并对您的移动应用后端执行一组REST调用。