Ветерок: неожиданная ошибка в getEntityGraph
Я использую расширение getEntityGraph, и оно отлично работает, за исключением следующего сценария:
- добавить новый объект
- не сохраняйте его и не вызывайте setDeleted для объекта
- вызовите getEntityGraph, передав в качестве параметров сущность и коллекцию np
Когда вызывается makePathSegmentFn, он вылетает в этой строке:
grps.forEach(function(grp) {
vals = vals.concat(grp._entities.filter(function (en) {
return en.getProperty(fkName) === keyValue;
}));
});
en
имеет значение null, поэтому возникает исключение. Я обошел проблему, проверив, является ли en нулевым, и каждый, кажется, работает нормально. Но, возможно, это должно быть сделано в оригинальном коде, если это ошибка? Обратите внимание, что только один объект является нулевым среди всех объектов в коллекции np. Я думаю, что это тот, который был удален, но не могу сказать наверняка.
1 ответ
Обновление 29 апреля 2014
ОК... Теперь я понял. Вы говорите об удаленной дочерней сущности, а не об отделенной корневой сущности.
Спасибо за выявление этой ошибки. Я добавил тест для этого сценария в DocCode, затем исправил ошибку. Оба изменения перенесены в github. Они появятся в следующем официальном релизе. Вы можете получить текущий getEntityGraph.js от github прямо сейчас.
Оригинальный ответ
Я не могу дублировать конкретную ошибку, которую вы описываете... потому что getEntityGraph
бросает задолго до того, как доберется до makePathSegmentFn
... как и должно быть!
getEntityGraph
должен выдать исключение (например, " getEntityGraph root[0] является отделенной сущностью "), когда любая из корневых сущностей, переданных в это "Detached".
Когда вы создаете новую сущность и немедленно удаляете ее (не сохраняя сначала), ее состояние изменяется с "Добавлено" на "Отдельно"; это больше не сущность в кеше. Это ожидаемое поведение (см. "Переходы EntityState" в разделе документации "Внутри Entity"). Вот что происходит, когда я точно следую твоим действиям.
Пожалуйста, предоставьте jsFiddle или plunker, который демонстрирует ошибку.