2

我正在尝试使用带有 jsonResultsAdapter 的微风 EntityQuery 来使用这样的第三方 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' of null

我认为 EntityManager 忽略了.using(jsonResultAdapter)语句,它正在尝试使用在微风.js 中定义的默认 jsonResultsAdapter:

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 而不是默认的。

4

1 回答 1

1

v 1.2.7开始,此问题已得到修复。

----- 以前的帖子

好的,这是一个错误。它将在下一个版本中修复。

现在,我认为您可以改用 dataService 的 jsonResultsAdapter。即这样的东西。

var ds = new DataService( { serviceName: yourServiceName, jsonResultsAdapter: yourAdapter });
var em = new EntityManager({ dataService: ds });
var query = new breeze.EntityQuery("Events")
return em.executeQuery(query);
于 2013-03-22T06:34:02.923 回答