【问题标题】:BreezeJS import entities type errorBreezeJS 导入实体类型错误
【发布时间】:2018-08-07 10:18:06
【问题描述】:

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

我将每个实体导出到 indexeddb 中自己的存储中,这绝对可以正常工作。我也可以单独重新导入所有这些实体。当我在导入实体时脱机创建实体(因此会有一个临时键,例如 -1)时出现问题,我收到错误

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

这似乎是由于微风修复 id 时的外键问题,但我不知道如何解决这个问题。

我已尝试按特定顺序导入实体等。

如果我在一个字符串中导出全部内容并在一个字符串中重新导入它,那么它可以与新创建的实体一起正常工作,但我会遇到一些大小限制,因此会拆分实体。

【问题讨论】:

    标签: angularjs breeze indexeddb


    【解决方案1】:

    您已正确识别问题。

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

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

    这有意义吗?

    【讨论】:

    • 是的,这是有道理的。可能会在存储中保留一组基本数据,然后增量存储更改将是解决此问题的一种方式。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多