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

In Xamarin azure, UpdateAsync is not updating database, only changes info locally

因此,当我在 table 上调用 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;
}

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

await Client.SyncContext.PushAsync();

注意:执行推送操作时,可能需要处理冲突解决。更多细节,你可以参考adrian关于Handling Conflict Resolution and An Offline Client.

的书

此外,您可以使用 client.GetTable<Model>() 构建在线 table 并针对您的在线 table 进行 CUD 更改。详情请参考here. Additionally, you could follow here离线同步

所以我所要做的就是把它放在我的 updatesync 的底部。注意:这没有用,除非我在我的 about_user 模型中明确有一个名为版本的变量,如 [JsonProperty(PropertyName = "Version")] public 字符串版本 { 得到;放; }

  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));
    }