2017-10-05 1 views
0

So aktualisiert meine App die Informationen innerhalb von lokal, wenn ich auf der Tabelle aufrufen, aber es aktualisiert nicht die Online-Datenbank? Mache ich etwas falsch?In Xamarin Azure aktualisiert UpdateAsync die Datenbank nicht, ändert nur die Informationen lokal

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

umformatiert Linien –

Antwort

0

nach Ihrem Code, verwenden Sie die Sync-Tabelle (IMobileServiceSyncTable), für den UpdateAsync Betrieb würde es Ihre lokale SQLite-Datenbank aktualisieren. Um Ihre Online-Datenbank zu aktualisieren, müssen Sie mit dem folgenden Code, um die Push-Operation auszuführen:

await Client.SyncContext.PushAsync(); 

Hinweis:, wenn der Druckvorgang ausgeführt wird, müssen Sie möglicherweise Konfliktlösung behandeln. Für weitere Details können Sie auf Adrians Buch über Handling Conflict Resolution und An Offline Client verweisen.

Darüber hinaus können Sie client.GetTable<Model>() für den Aufbau einer Online-Tabelle verwenden und CUD Änderungen an Ihrer Online-Tabelle vornehmen. Weitere Details finden Sie unter here. Darüber hinaus können Sie here über Offline-Synchronisierung folgen.

+0

Danke, ich glaube, ich eine Funktion Synctable nenne, nachdem ich das Update zu tun, die das tut. Aber ich werde den Versuch zu fangen, um diesen Konflikt zu fangen – user3348354

+0

Bedenken, zögern Sie nicht, lassen Sie es mich wissen. –

+0

Ihre Antwort half mir bei der Antwort! Vielen Dank – user3348354

0

Also alles, was ich musste, ist das auf der Unterseite meines Updatesync. Hinweis: Dies funktioniert nicht, wenn ich explizit eine Variable in meinem about_user-Modell namens version wie [JsonProperty (PropertyName = "Version")] hatte public string Version {get; einstellen; }

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