breeze:使用客户端模型时查询本地缓存

时间:2014-11-26 10:49:59

标签: breeze

考虑以下代码。从服务器获取数据时,它工作正常。我有一个自定义数据适配器(staffManagemetnService),它从服务器返回的json创建客户端实体。

但是,如果我调用executeQueryLocally,它会失败并引发以下异常:Cannot find an entityType for resourceName: 'GetInternalResourcesByCompetence'. Consider adding an 'EntityQuery.toType' call to your query or calling the MetadataStore.setEntityTypeForResourceName method to register an entityType for this resourceName

        var query = breeze.EntityQuery.from('GetInternalResourcesByCompetence').withParameters(parameters);

        var result = self.manager.executeQueryLocally(query.using(dataService.staffManagementService));
        if (result) {
            return $q.resolve(result);
        } else {
            return this.manager.executeQuery(query.using(dataService.staffManagementService))
                .then(function (data) {
                    return data.results;
                })
               .catch(function (err) {
                   logError('Restrieving resources days off failed', err, true);
               });
        }

我不确定这意味着什么。它是否应该开箱即用,因为我特别要求微风使用自定义dataAdapter?

1 个答案:

答案 0 :(得分:1)

资源名称和实体类型名称之间的区别很重要。资源名称通常是端点的一部分,也可以是复数(例如orders)。类型名称通常是单数的(例如order)。

本地微风对资源名称无能为力,因为它不会调用端点。相反,您要求某个实体类型名称。

您可以使用setEntityTypeForResourceName函数将entityType映射到资源名称:

metadataStore.setEntityTypeForResourceName('Speakers', 'Person');

参见第34章;资源名称不是EntityType名称"以及后面的章节:http://www.getbreezenow.com/documentation/querying-locally