BreezeJS - 使用扩展

时间:2014-02-03 21:25:55

标签: breeze

我正在查询服务器以获取具有展开的实体

function _loadIncidents() {
    var deffered = Q.defer(),
        queryObj = new breeze.EntityQuery().from('Incidents').expand(['Deployments', 'IncidentComments', 'DTasks', 'ExtendedProperties', 'IncidentEvents']);

    dataRepository.fetchEntitiesByQuery(queryObj, true).then(function (incidents) {
        var query = breeze.EntityQuery.from("DTasks"),
            incidentIds = dataRepository.getEntitiesByQuerySync(query);

        deffered.resolve();
    }, function(err) {
        deffered.reject(err);
    });

    return deffered.promise;
};

我得到了结果,一切都很好,当我查询breeze缓存以获取实体时 - 我得到空集合。那么当使用expand时,扩展的实体会被添加到缓存中吗?

2 个答案:

答案 0 :(得分:0)

是的,扩展中标识的相关实体应该在缓存中...如果查询是“正确的”并且服务器按您的意图解释您的请求。

查看第一个请求的响应的有效负载。相关实体是否存在?如果没有,可能在服务器上没有很好地收到查询。作为一般规则,在想知道Breeze是否使用这些数据做正确的事情之前,您需要确保数据是通过网络传输的。

我确实发现自己想知道扩展列表中项目的拼写。他们都在PascalCase。它们是Incident类型的导航属性的名称吗?或者它们是相关EntityTypes的名称?它们需要是前者(导航属性名称),而不是后者。

答案 1 :(得分:0)

我的导航属性有问题 - 因为我没有使用OData webapi而不使用EF,导航属性存在问题所以对于我刚写的当前时间

 Object.defineProperty(this, 'Deployments', {
        get: function () {

            return (this.entityAspect && this.entityAspect.entityManager) ?
                this.entityAspect.entityManager.executeQueryLocally(new breeze.EntityQuery("Deployments").
                where('IncidentID', 'eq', this.IncidentID)) :
            [];
        },
        set: function (value) { //used only when loading incidents from the server
            if (!value.results) {
                return;
            }
            var i = 0,
                dataRepository = require('sharedServices/dataRepository');
            for (i; i < value.results.length; i++) {
                dataRepository.addUnchangedEntity('Deployment', value.results[i]);
            }
        },
        enumerable: true
    });