在使用select的查询中,未定义breeze 1.4.5和EF 6.0.1上的inlineCount

时间:2013-11-17 17:39:15

标签: breeze

我有很多查询,分页正常使用Breeze 1.4.5(旧版),EF 5,WebApi。

然而,作为一个长期维护的项目,由于其复杂性,将不可能应用更新的技术。

因此,项目已更新为使用EF6,ASP MVC 5和WebApi 2,并执行以下步骤How to Upgrade an ASP.NET MVC 4 and Web API Project to ASP.NET MVC 5 and Web API 2和Breeze文档。

更新后一切正常,除了需要在ApiController方法中添加[BreezeQueryable(MaxExpansionDepth = [n])][BreezeQueryable(MaxNodeCount = [n])]属性。

现在最大的问题是'data.inlineCount'的返回总是'未定义',它完全打破了分页逻辑。

  

请注意,问题也出现在没有任何属性的方法中,除了'HttpGet'不是Breeze inlineCount is undefined的情况,而在客户端没有select的查询中没有选择一切正常。

未提及的一件事是,在使用Fiddler和Chrome开发工具分析响应时,'InlineCount'的片段不仅仅是结果数组。

在查询分析器中,SQL是正确的,包含用于计数的元素。

使用TempHire样本,然后仅在“资源管理”屏幕上进行测试,更改'all'功能位置上的repository.js .inlineCount(true):

this.all = function () {
    var query = breeze.EntityQuery
        .from(resourceName)
        .inlineCount(true);
    return executeQuery(query);
};

结果一切顺利:'InlineCount:9' 现在选择一个:

this.all = function () {
    var query = breeze.EntityQuery
        .from(resourceName)
        .select('Address1, Address2, City, FullName, Id, PhoneNumber, State, Zipcode')
        .inlineCount(true);
    return executeQuery(query);
};

我们将不再是$ id,$ type和InlineCount只有结果数组。 先前版本中不存在此行为。

遵循正在使用的大型常见查询:

function getOrdensServico(observable, criteria, pagingInfo) {
        var query = entityQuery.from(info.ordemServico.entitySet)
            .select('idOrdemServico, numeroOrdemServico, dataOrdermServico, situacaoOrdemServico, conta, departamento, usuario')
            .orderBy(info.ordemServico.orderBy);

        if (criteria) {
            criteria = criteria();
            if (criteria.numero()) {
                query = query.where('numeroOrdemServico', '==', criteria.numero());
            }
            if (criteria.situacao()) {
                query = query.where('situacaoOrdemServico', '==', criteria.situacao());
            }

            if (criteria.nomeDepartamento()) {
                query = query.where('departamento.nomeDepartamento', 'contains', criteria.nomeDepartamento());
            }
            if (criteria.dataCriadaEntre() > 0) {
                var pred = utl.createBetweenPredicateFromDays("dataOrdermServico", criteria.dataCriadaDe, criteria.dataCriadaEntre);
                query = query.where(pred);
            }
        }

        if (pagingInfo) {
            var currentPage = ko.utils.unwrapObservable(pagingInfo.currentPage),
                pageSize = ko.utils.unwrapObservable(pagingInfo.pageSize);
            query = query.skip(currentPage * pageSize).take(pageSize).inlineCount(true);
        }

        return datacontext.manager.executeQuery(query.toType(info.ordemServico.entityName))
                          .then(querySucceeded)
                          .fail(queryFailed);

        function querySucceeded(data) {
            utl.safeSetCollection(observable, data.results);
            if (pagingInfo) {
                pagingInfo.inlineCount(data.inlineCount || data.results.length);
            }
            logSucceeded('Ordens de serviço', data);
        }
    }

2 个答案:

答案 0 :(得分:0)

与EF5有类似的问题,如下所示: Breeze inlineCount is undefined

为我用于破坏inlineCount的方法添加属性。过了一段时间,我想到了那些需要分页的查询,它通常只是来自实体所代表的信息的最小值,所以我重写了那些查询以仅包含部分数据并自行记下inlineCount并且它工作正常。

答案 1 :(得分:0)

最新版本中已修复此问题:Breeze 1.4.7,现已上市。