inlineCount sur breeze 1.4.5 et EF 6.0.1 est pas défini dans les requêtes avec une sélection de

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

  •  21-12-2019
  •  | 
  •  

Question

J'ai beaucoup de requêtes avec la pagination fonctionne normalement avec Brise 1.4.5 (legacy), EF 5, la WebApi.

Cependant étant un projet qui va être maintenus sur le long terme a été fixé pour tenir à jour l'application des technologies de même ne pas être possible en raison de leur complexité.

Par conséquent, le projet a été mis à jour pour utiliser EF6, ASP MVC 5 et WebApi 2 avec les étapes suivantes Comment mettre à jour une ASP.NET MVC 4 Web et API Projet de ASP.NET MVC 5 et Web API 2 et la Brise de la documentation.

Après la mise à jour tout était ok sauf la nécessité d'ajouter [BreezeQueryable(MaxExpansionDepth = [n])] ou [BreezeQueryable(MaxNodeCount = [n])] attribut(s) dans ApiController méthodes.

Le plus gros problème maintenant est que le retour de données.inlineCount' est toujours 'undefined' et il rompt totalement la logique de la pagination.

Notez que le problème se produit aussi dans les méthodes sans aucun attribut à l'exception de "HttpGet" qui n'est pas Brise inlineCount est pas défini les cas et dans les requêtes avec select sur le côté client sans sélectionner tout sera normal.

Une chose qui n'était pas mentionné, c'est que dans l'analyse de la réponse à l'aide de Violoneux et Chrome dev tools le fragment de "InlineCount' il n'y a pas seulement les résultats de tableau.

Dans la requête du générateur de profils SQL est correcte et contient des éléments pour le comptage.

À l'aide de la TempHire de l'échantillon et ensuite seulement pour l'essai sur "la Gestion des Ressources de l'écran" modifier les repository.js sur 'tout' la fonction de lieu .inlineCount(vrai):

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

Tout va bien avec le résultat:'InlineCount:9' Maintenant, sélectionnez:

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

Nous n'aurons plus $id, $type et InlineCount seulement les résultats de tableau.Ce problème n'existe pas dans la version précédente.

Suit une grande commune de la requête en cours d'utilisation:

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);
        }
    }
Était-ce utile?

La solution

Cela a été corrigé dans la dernière version:Brise 1.4.7, disponible maintenant.

Autres conseils

Eu le même problème avec EF5, comme demandé ici:Brise inlineCount est pas défini

Ajout d'attributs à des méthodes utilisées pour briser inlineCount pour moi.Après un moment, j'ai pensé à ces requêtes qui nécessitent de la pagination, c'est habituellement juste minimum d'informations à partir de l'entité représentée j'ai donc réécrit ces requêtes pour inclure uniquement les données partielles et écrit inlineCount par moi-même et il fonctionne très bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top