我使用 getEntityGraph 扩展,它工作正常,除了以下情况:
- 添加新实体
- 不要保存它并在实体上调用 setDeleted
- 通过传递实体和 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/