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

问题描述 投票:0回答:1

我无法使用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; }
    }
xamarin xamarin.forms azure-mobile-services
1个回答
1
投票

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

正如How offline synchronization works所说的Push操作:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.