Ошибка при использовании «любого» оператора для унаследованного объекта

#breeze

#breeze

Вопрос:

Версия Breeze: 1.4.14

У меня есть 2 сущности: Person и Patient. У пользователя есть список телефонов, и пациент наследуется от Person.

Я могу запросить на сервере:

 var patients = Patients.Where(x => x.Telephones.Where(xx => xx.Number == "XXXX-XXXX").Any());
  

Я также могу получить результаты, вставив этот URL-адрес в браузер:

 /breeze/Patients?$filter=Telephones/any(x1: x1/Number eq 'XXXX-XXXX')
  

Но если я попытаюсь выполнить запрос breeze от клиента

 var query = breeze.EntityQuery.from("Patients");
query = query.where("telephones", "any", "number", "==", "XXXX-XXXX");
  

Я получаю сообщение об ошибке:

 "TypeError: Cannot read property 'isAnonymous' of undefined breeze.debug.js:14807:34"
  

Если я изменю запрос на базовую таблицу «Person», это сработает:

 var query = breeze.EntityQuery.from("Person");
query = query.where("telephones", "any", "number", "==", "XXXX-XXXX");
  

Но мне действительно нужны все данные пациента … я что-то делаю неправильно или это ошибка?

Ответ №1:

Сейчас я не знаю, является ли это ошибкой, но я устраняю ее, вызывая toType() в своем запросе:

 var query = breeze.EntityQuery.from("Patients").toType("Patient");
query = query.where("telephones", "any", "number", "==", "XXXX-XXXX");
  

Комментарии:

1. Если вам пришлось вызывать toType(), то, скорее всего, у вас не настроено сопоставление имени ресурса / типа сущности. Смотрите раздел «Сопоставление EntityType / resourceName» здесь: breezejs.com/documentation/querying-locally

2. @JayTraband, если я не использую условие «any» (но использую другие), запрос работает нормально!

3. У меня точно такая же проблема, что и у @Leo, при использовании «any» или «all» мне пришлось использовать . toType(), иначе это не сработает.

Ответ №2:

Привет, используйте этот код для решения вашей проблемы…

   var query = breeze.EntityQuery.from("Patients);
  query = query.where("telephones", "breeze.FilterQueryOp.any", "number", "breeze.FilterQueryOp.eq", "XXXX-XXXX");