代码之家  ›  专栏  ›  技术社区  ›  Anthony Joanes

BreezeJS导入实体类型错误

  •  0
  • Anthony Joanes  · 技术社区  · 8 年前

    这是我目前拥有的,OData后端,AngularJS在前端使用breezejs。该应用程序是一个科尔多瓦的应用程序,将脱机工作,所以我需要存储我在微风缓存某处。我现在的选择是indexeddb。

    我正在将每个实体导出到indexeddb中自己的存储中,这非常好用。我也可以单独重新导入所有这些实体。当我离线创建一个实体时,问题就来了(所以会有一个临时密钥,例如-1),当我导入实体时,我得到一个错误

    entity Customer TypeError: Cannot read property 'values' of null
    

    这似乎是由于外键问题,当微风做了它的身份证修复,但我不知道如何绕过这一点。

    我试过按一定顺序导入实体。

    如果我在一个字符串中导出整个批次,然后在一个字符串中重新导入,那么它可以很好地处理新创建的实体,但是我达到了一些大小限制,因此实体被拆分。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jay Traband    7 年前

    您已正确识别问题。

    问题是,breeze在导入实体时需要修复临时外键。这通常通过导出和导入整个EntityManager来处理,后者包含执行临时密钥修复所需的信息。当您只导出实体本身时,会丢失此信息,因为它不是“实体”级别,实际上是entityManager级别,而entityManager会在一个地方跟踪所有“temp”键。

    因此,您可以选择在导出和导入时不使用临时密钥,或者将整个entityManager(或仅包含更改的子集实体管理器)存储在单个indexdb缓存项中。

    这有道理吗?