TableController强制Id字段为字符串

本文关键字:字符串 字段 Id 强制 TableController | 更新日期: 2023-09-27 17:58:44

我正在构建一个带有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结合使用?

TableController强制Id字段为字符串

使用字符串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/-这使用一个单独的表来保存移动数据,然后使用一个视图将原始表与移动数据合并。