我无法使用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)根据这一点,我必须推动所有变化并拉动所有表格。
正如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调用。