我无法使用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; }
}
答案 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调用。