【问题标题】:breeze: unexpected error in getEntityGraph微风:getEntityGraph 中的意外错误
【发布时间】:2014-04-30 04:52:18
【问题描述】:

我使用 getEntityGraph 扩展,它可以正常工作,但以下情况除外:

  1. 添加新实体
  2. 不要保存它并在实体上调用 setDeleted
  3. 通过将实体和 np 集合作为参数传递来调用 getEntityGraph

当 makePathSegmentFn 被调用时,它会在这一行崩溃:

 grps.forEach(function(grp) {
     vals = vals.concat(grp._entities.filter(function (en) {
       return en.getProperty(fkName) === keyValue;         
   }));
 });

en 为 null,因此会引发异常。我通过检查 en 是否为 null 来解决该问题,并且每个似乎都可以正常工作。但如果这是一个错误,也许应该在原始代码中完成?请注意,在 np 集合中的所有实体中,只有一个实体为空。我猜是那个被删了,但不能确定。

【问题讨论】:

    标签: breeze


    【解决方案1】:

    2014 年 4 月 29 日更新

    好的……我现在明白了。您说的是已删除的 child 实体,而不是分离的 root 实体。

    感谢您发现此错误。我在 DocCode 中添加了针对此场景的测试,然后修复了该错误。两项更改都推送到了 github。它们将出现在下一个正式版本中。你现在可以get the current getEntityGraph.js from github

    原答案

    我无法复制您描述的特定失败...因为getEntityGraph 在到达makePathSegmentFn 之前很久就抛出... 应该这样做!

    getEntityGraph 应该在 any 根实体通过时抛出异常(例如,“'getEntityGraph' root[0] is an detached entity”) in 是“分离的”。

    当您创建一个新实体并立即删除它(不先保存它)时,它的状态会从“已添加”变为“已分离”;它不再是缓存中的实体。这是预期的行为(参见"Inside the Entity" documentation topic 中的“EntityState 转换”)。当我完全按照您的复制步骤进行时,就会发生这种情况。

    请提供演示错误的 jsFiddle 或 plunker。

    【讨论】:

    • 我稍后会尝试做一个 plunker,但事情是这样的:我们有一个根实体和其他实体的集合。我们创建一个实体并将其添加到根的孩子。然后,我们对该实体执行 setdeleted()。现在,如果您尝试使用 getEntityGraph,它将引发异常,因为 _entityGroupMap 将包含一个空条目和一个相关的 _emptyIndexes 条目。因此,在 getEntityGraph 的 makePathSegmentFn 中检查实体是否为空就可以了。如果不清楚,请见谅
    • 我在这里尝试了测试:github.com/IdeaBlade/Breeze/blob/master/Samples/DocCode/DocCode/… 并且我有同样的错误。仅当您删除处于“已添加”状态的实体时才会发生这种情况。它链接到 setDeleted 方法,该方法为新创建的实体执行 detachEntity。因此,当删除一个新实体(创建的客户端)时,它会丢失并且无法检索(因为它在 groupMap 中设置为 null)。我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多