【发布时间】:2018-04-14 07:37:51
【问题描述】:
我有一个离线同步表,我在其中插入了一个项目。我的移动服务 Web Api 控制器添加并返回一个不同于使用 IMobileServiceSyncTable<T>.InsertAsync(item) 插入本地 SQLite 数据库的 ID(预期行为)。
到服务器的帖子很好。该项目由 API 创建。我遇到的问题是在本地解决该项目。我正在使用PullAsync() 操作跟进此操作。当我查看我的项目列表时,我创建的原始项目带有一个 Id 的 guid(预期行为),并且通过 API 创建的项目带有我的数据库 ID。我需要将 API 返回的项目与本地项目合并。
我不确定将其移至在线插入是否能解决我的问题。 我有另一个操作立即取决于此操作的成功。后续操作惨遭失败,因为很明显,在我的 API 中找不到 guid Id 值,并且我收到一串 HTTP 500 错误。
我想知道是否有解决此问题的最佳实践,或者我不知道的某些东西可以轻松解决此问题。我认为这对于使用该框架的人来说很常见?本地 SQLite 存储中的 id 很可能永远不会匹配 API 背后的实际数据库值。
我已阅读以下内容(以及有关该主题的更多内容),但我仍然不清楚如何解决此问题。
欢迎任何建议。
【问题讨论】:
-
我对您如何发布到服务器感到困惑,您的意思是向您的在线表端点发送请求以添加新项目或将新项目插入本地表,然后将您的本地项目推送到远程表?你的 Web Api 控制器是什么,https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter3/server/? AFAIK,如果您在未指定 id 的情况下针对远程表添加新项目,则移动应用后端将为您生成一个 guid id。
-
或者你是说将相同的项目添加到远程表中,然后插入到本地表中,然后从远程表中拉出项目,然后要合并这两个项目?
-
对不起,如果这令人困惑,我是这个同步框架的新手。同步框架将所有排队的操作推送到服务器,即将插入推送到 api 端点。 guid id 插入到本地表中,然后立即推送到服务器。当它从服务器返回时,我会进行同步(确保从服务器获得任何更新)。拉取后,本地表有两个项目。一个是本地插入的,另一个是使用“有效”ID 推送到 API 端点的。我想要的是这两个项目的合并,所以guid项目消失了。
-
@BruceChen 感谢您提供该书的链接。我不知道它的存在。 Chapter 3 - The Mobile Client 提供了一些见解。我现在正在阅读它。移动到在线插入现在修复它。我仍然会为离线插入找到解决方案。
标签: xamarin.forms azure-mobile-services