我正在使用Xamarin.Forms和Azure App Service的應用程序。 用戶必須明確執行數據同步。當用戶啓動一個數據同步很多的這個方法是執行從服務器獲取當前數據:Azure應用服務 - 離線同步 - PullAsync交易
await this.ISyncTable.PullAsync(queryId, query, cancellationToken).ConfigureAwait(false);
我的問題:應用程序進入不一致的狀態。例如,當用戶在數據同步完成之前關閉應用程序時。在這種狀態下,應用程序不可用。
編輯:
爲了更容易理解:假設我有一個表「的TodoItem」和「ToDoCategory」。用戶開始數據同步。數據同步運行併成功檢索所有ToDoItem。在下一步中,數據同步將獲得ToDoCategories(對PullAsync的另一個調用),但在此之前用戶關閉應用程序。現在我擁有所有的ToDoItems,但沒有ToDoCategories。但該應用程序不適用於沒有ToDoCategories。這是一個非常簡單的例子。實際項目中的數據結構要複雜得多。實體之間有很多依賴關係。
記錄同步錯誤/取消並在下一次應用程序啓動時提示用戶進行另一次同步是不行的。假設在下一次應用程序啓動時用戶沒有互聯網連接,並且無法執行數據同步。我無法鎖定應用單元下一次成功的數據同步。
有沒有辦法在事務中運行多個PullAsync操作?
謝謝你的回答。我認爲微軟應該在他們的SDK中直接擁有這樣的功能。它不僅僅是用戶關閉應用程序。在同步過程中可能存在網絡錯誤。主要問題是當同步中止時,本地設備上的數據可能不一致。需要類似Rollback的功能在未完成同步期間撤銷本地數據庫中的所有更改。我會考慮並在此處發佈我的解決方案... – OPunktSchmidt
我同意,SDK不適合具有多個相互依賴的表的應用程序。您可能希望創建一個自定義API,該API可以在一個HTTP請求中返回整個數據集合,並在本地存儲結果,但是您沒有利用SDK的離線同步功能。 –
另請參閱Adrian Hall關於使用Azure移動應用程序構建移動應用程序的書,特別是關於對象關係的這一部分:https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter3/relationships /「我們沒有事務允許同時更新數據庫中的多個表,每個表中的每個記錄都單獨更新,離線同步使用的推送過程對於表之間的關係如何工作具有重要影響,具體來說,只有單向關係才能在離線同步世界中發揮作用。「 –