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

StackOverflow https://stackoverflow.com//questions/20033947

  •  21-12-2019
  •  | 
  •  

我对使用 Breeze 1.4.5(旧版)、EF 5、WebApi 正常工作的分页有很多疑问。

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

因此,该项目已更新为使用 EF6、ASP MVC 5 和 WebApi 2,步骤如下 如何将 ASP.NET MVC 4 和 Web API 项目升级到 ASP.NET MVC 5 和 Web API 2 和微风文档。

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

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

请注意,除了“HttpGet”之外没有任何属性的方法中也会出现问题,而“HttpGet”不是 微风 inlineCount 未定义 在客户端有 select 的情况下,如果没有 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);
};

结果一切都很好:'内联计数: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);
        }
    }
有帮助吗?

解决方案

这已在最新版本中修复:微风 1.4.7,现已推出。

其他提示

EF5 也有类似的问题,如下所示:微风 inlineCount 未定义

向用于为我中断 inlineCount 的方法添加属性。一段时间后,我发现对于那些需要分页的查询,它通常只是所表示实体的最少信息,因此我重写了这些查询以仅包含部分数据并自己写下 inlineCount ,它工作得很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top