我使用Azure后端构建应用程序。根据所有教程(如下所示:https://azure.microsoft.com/en-gb/documentation/articles/app-service-mobile-dotnet-backend-how-to-use-server-sdk/),Microsoft建议您使用TableController<TData>
类来使用移动界面获取和设置数据。这提供了ODataControllers的所有功能,以及离线同步支持。但是,约束是TData
必须从ITableData
派生,这反过来意味着我的表中的ID字段必须是string
个字段。
是否有针对此的解决方法,这不会破坏实体框架?如果我的实体使用顺序标识ID字段存储在我的数据库中,这是否意味着我不能将TableController<TData>
与OData结合使用?
答案 0 :(得分: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/ - 它使用一个单独的表来保存移动数据,然后使用一个视图将原始表与移动数据合并。