2016-07-26 82 views
1

我使用Azure後端創建應用程序。根據所有教程(例如:https://azure.microsoft.com/en-gb/documentation/articles/app-service-mobile-dotnet-backend-how-to-use-server-sdk/),Microsoft建議您使用TableController<TData>類來使用移動界面獲取和設置數據。這提供了ODataController的所有功能,以及離線同步支持。但是,約束條件是TData必須來自ITableData,這意味着我的表中的ID字段必須是string字段。TableController強制Id字段爲字符串

有沒有解決方法,這不會打破實體框架?如果我的實體存儲在具有連續標識ID字段的數據庫中,這是否意味着我不能將TableController<TData>與OData結合使用?

回答

1

有一個很重要的原因是有字符串Id。

假設您有兩個客戶,都是離線的。服務器說最後一個ID是1. 客戶端A插入數據,它獲取ID 2,但它是離線的。客戶端B然後插入數據,也是ID 2,但它是離線的。然後,客戶端A同步其數據,記錄被接受。然後,客戶端B同步其數據併發生衝突。

要解決這個問題,每個ID必須是全局唯一的。所以使用一個包含(通常)一個GUID的字符串。

有辦法解決您報告的問題。例如,我在我的博客文章中展示了一種方法:https://shellmonger.com/2016/05/11/30-days-of-zumo-v2-azure-mobile-apps-day-19-asp-net-table-controllers/ - 它使用單獨的表格來保存移動數據,然後使用原始表格與移動數據合併的視圖。

+0

感謝您的支持。我很快就要上場了。快速提問:爲什麼我們不能只將負號分配給未同步的數據? –

+0

也許是因爲那會是一堆蠕蟲,現在我想到了它。可變ID - 不酷。 –

+0

是的 - 完整的蠕蟲。離線同步存儲最終處於不良狀態的可能性很高,可變ID –