EntityQuery с использованием jsonResultsAdapter

Я пытаюсь использовать Breeze EntityQuery с jsonResultsAdapter для использования стороннего API, подобного этому (настройка DataService опущена):

var jsonResultsAdapter = new breeze.JsonResultsAdapter({
            name: "eventAdapter",
            extractResults: function (json) {
                return json.results;
            },
            visitNode: function (node, queryContext, nodeContext) {
                var entityTypeName = 'Event';
                var entityType = entityTypeName && queryContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
                var propertyName = nodeContext.propertyName;
                var ignore = propertyName && propertyName.substr(0, 1) === "$";

                return {
                    entityType: entityType,
                    nodeId: node.$id,
                    nodeRefId: node.$ref,
                    ignore: ignore
                };
            }
        });

var query = new breeze.EntityQuery("Events")
                .using(jsonResultsAdapter);

        return this.manager.executeQuery(query);

Но он возвращает эту ошибку: «Невозможно прочитать свойство '$ type', равное нулю».

Я думаю, что EntityManager игнорирует оператор .using (jsonResultAdapter) и пытается использовать jsonResultsAdapter по умолчанию, определенный в breeze.js:

ctor.prototype.jsonResultsAdapter = new JsonResultsAdapter({

    name: "webApi_default",

    visitNode: function (node, queryContext, nodeContext ) {
        var entityTypeName = EntityType._getNormalizedTypeName(node.$type);
        var entityType = entityTypeName && queryContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
        var propertyName = nodeContext.propertyName;
        var ignore = propertyName && propertyName.substr(0, 1) === "$";

        return {
            entityType: entityType,
            nodeId: node.$id,
            nodeRefId: node.$ref,
            ignore: ignore
        };
    }

Не знаю, как сказать ветру использовать мой jsonResultsAdapter вместо стандартного.


person Daniel Silva    schedule 22.03.2013    source источник


Ответы (1)


В версии 1.2.7 это исправлено.

----- предыдущий пост

Хорошо, это ошибка. Это будет исправлено в следующем выпуске.

На данный момент я думаю, вы можете вместо этого использовать jsonResultsAdapter dataService. то есть что-то вроде этого.

var ds = new DataService( { serviceName: yourServiceName, jsonResultsAdapter: yourAdapter });
var em = new EntityManager({ dataService: ds });
var query = new breeze.EntityQuery("Events")
return em.executeQuery(query);
person Jay Traband    schedule 22.03.2013