2017-10-05 4 views
0

Donc, mon application met à jour les informations à l'intérieur quand j'appelle UpdateSync sur la table mais ne met pas à jour la base de données en ligne? Est-ce que je fais quelque chose de mal?Dans Xamarin azure, UpdateAsync ne met pas à jour la base de données, ne change que les informations localement

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

lignes reformaté –

Répondre

0

Selon votre code, vous utilisez la table de synchronisation (IMobileServiceSyncTable), pour l'opération UpdateAsync, il mettra à jour votre base de données SQLite locale. Afin de mettre à jour votre base de données en ligne, vous devez exécuter l'opération Push en utilisant le code suivant:

await Client.SyncContext.PushAsync(); 

Note: lors de l'exécution de l'opération de poussée, vous devrez peut-être gérer la résolution des conflits. Pour plus de détails, vous pouvez vous référer au livre d'adrian sur Handling Conflict Resolution et An Offline Client.

En outre, vous pouvez utiliser client.GetTable<Model>() pour construire une table en ligne et effectuer des modifications CUD sur votre table en ligne. Pour plus de détails, vous pouvez vous référer au here. En outre, vous pouvez suivre here sur la synchronisation hors connexion.

+0

Merci, je crois que je fais appel une fonction Synctable après que je fais la mise à jour qui le fait. Mais je vais mettre en œuvre le try catch afin d'attraper ce conflit – user3348354

+0

Toutes les préoccupations, n'hésitez pas à me le faire savoir. –

+0

Votre réponse m'a aidé à trouver la réponse! Je vous remercie – user3348354

0

Donc tout ce que je devais faire est de mettre cela au bas de ma page de mise à jour. Note: ceci n'a pas fonctionné sauf si j'ai explicitement eu une variable dans mon modèle about_user appelé version comme [JsonProperty (PropertyName = "Version")] public string Version {get; ensemble; }

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