所以,当我在桌面上调用UpdateSync
但是它没有更新在线数据库时,我的应用会更新本地内部的信息?我做错了吗?
IMobileServiceSyncTable<Models.About_user> about_user_table;
Update_my_table(Object Item)
{
Models.About_user About_user = (Models.About_user)Item;
await about_user_table.UpdateAsync(About_user);
IMobileServiceSyncTable<Models.About_user> about_user_table;
}
答案 0 :(得分:0)
根据您的代码,您正在使用同步表(IMobileServiceSyncTable
),对于UpdateAsync
操作,它将更新您的本地SQLite数据库。要更新在线数据库,需要使用以下代码执行Push操作:
await Client.SyncContext.PushAsync();
注意:执行推送操作时,您可能需要处理冲突解决。有关详细信息,请参阅adrian关于Handling Conflict Resolution和An Offline Client的书籍。
此外,您可以使用client.GetTable<Model>()
构建在线表格,并对您的在线表格进行CUD更改。有关详细信息,请参阅here。此外,您可以关注离线同步here。
答案 1 :(得分:0)
所以我只需要把它放在我的更新同步的底部。注意:除非我在我的about_user模型中明确地使用一个名为[JsonProperty(PropertyName =&#34; Version&#34;)]的版本的变量,否则这不起作用 public string Version {get;组; }
await about_user_table.UpdateAsync(About_user);
try
{
await Client.SyncContext.PushAsync();
/// await about_user_table.PullAsync("all About_user", about_user_table.CreateQuery());
}
catch (MobileServicePushFailedException ex)
{
if (ex.PushResult != null)
{
foreach (var error in ex.PushResult.Errors)
{
await ResolveConflictAsync(error,"about_user_table");
}
}
}
async Task ResolveConflictAsync(MobileServiceTableOperationError error, string table_name)
{
var serverItem = error.Result.ToObject<About_user>();
var localItem = error.Item.ToObject<About_user>();
// Note that you need to implement the public override Equals(TodoItem item)
// method in the Model for this to work
if (serverItem.Equals(localItem))
{
// Items are the same, so ignore the conflict
await error.CancelAndDiscardItemAsync();
return;
}
// Client Always Wins
localItem.Version = serverItem.Version;
await error.UpdateOperationAsync(JObject.FromObject(localItem));
}