在Xamarin azure中,UpdateAsync不更新数据库,仅在本地更改信息

时间:2017-10-05 01:23:40

标签: azure xamarin azure-mobile-services

所以,当我在桌面上调用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;
}

2 个答案:

答案 0 :(得分:0)

根据您的代码,您正在使用同步表(IMobileServiceSyncTable),对于UpdateAsync操作,它将更新您的本地SQLite数据库。要更新在线数据库,需要使用以下代码执行Push操作:

await Client.SyncContext.PushAsync();

注意:执行推送操作时,您可能需要处理冲突解决。有关详细信息,请参阅adrian关于Handling Conflict ResolutionAn 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));
    }