这是我当前拥有的,OData后端,在前端使用breezejs的AngularJS。该应用程序是cordova应用程序,可以脱机工作,因此我需要将微风缓存中的内容存储在某个地方。我的选择是当前的indexeddb。
我正在将每个实体导出到indexeddb中自己的存储中,这绝对可以正常工作。我也可以单独重新导入所有这些实体。问题是当我在导入实体时出现错误时,当我离线创建实体(因此将有一个临时密钥,例如-1)时出现
entity Customer TypeError: Cannot read property 'values' of null
这似乎是由于微风对其id进行修复时出现的外键问题,但我不知道如何解决此问题。
我尝试按某种顺序导入实体。
如果我将整个批次导出为一个字符串,然后将其重新导入为一个字符串,那么它与新创建的实体可以正常工作,但是我遇到了一些大小限制,因此实体被分割了。
答案 0 :(得分:1)
您已正确识别问题。
问题在于,微风在导入实体时需要修复临时外键。通常,这可以通过导出和导入整个EntityManager进行处理,其中包含执行临时键修复所需的信息。当仅导出实体本身时,由于它不是“实体”级别,因此会丢失此信息,它实际上是entityManager级别,而entityManager会在一个位置跟踪所有“临时”键。
因此,您的选择是在导出和导入或将整个entityManager(或仅包含更改的子集实体管理器)导出或导入或存储在单个indexdb缓存项中时,避免使用临时键。
这有意义吗?