Breeze :getEntityGraph 中出现意外错误

标签 breeze

我使用 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 是否为空来解决这个问题,并且每个似乎都工作正常。但如果这是一个错误,也许应该在原始代码中完成?请注意,np 集合中的所有实体中只有一个实体为 null。我猜那是被删除的,但不能确定。

最佳答案

2014 年 4 月 29 日更新

好的...我现在明白了。您谈论的是已删除的实体,而不是分离的实体。

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

原始答案

我无法重复您描述的特定故障...因为getEntityGraph在到达makePathSegmentFn之前就抛出了...正如它应该做的那样!

getEntityGraph 应该在 any 时抛出异常(例如,“'getEntityGraph' root[0] 是一个分离实体”)传入的根实体是“分离的”。

当您创建一个新实体并立即将其删除(无需先保存)时,其状态将从“已添加”更改为“已分离”;它不再是缓存中的实体。这是预期的行为(请参阅 "Inside the Entity" documentation topic 中的“EntityState 转换”)。这就是当我完全按照您的重现步骤操作时会发生的情况。

请提供一个 jsFiddle 或 plunker 来演示该错误。

关于 Breeze :getEntityGraph 中出现意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22610413/

相关文章:

angularjs - 如果不存在, Breeze 获取元数据

breeze - Breeze :子实体已被其他人删除后,在重新加载父实体后它们仍然出现

javascript - 在 Breeze/Angular 中保留异步查询顺序

php - Durandal 上的 BreezeJS 与 PHP REST API (Laravel)

javascript - SignalR 与 Breeze 相结合

model-view-controller - 如何计算带有 Breeze .js 扩展实体的网格中的总数?

angularjs - 使用 $route resolve stops 页面解决 breeze query/Q promise

javascript - Breeze:使用complexType添加EntityType(entityTypes聚合)

breeze - 不支持使用 Breeze 在同一查询中执行选择和扩展

javascript - Breeze : mixing EF context and IQueryable