Breeze为每个ODATA查询询问元数据
题
当我使用具有三个选择查询的新的Breeze角度服务运行一个简单的角度页面时,我看到细风请求三个元数据副本。有没有办法删除两个额外的元数据呼叫?
我创建一个EntityManager的一个实例,然后发出三个查询。
var entityManager = entityManagerFactory.newManager();
var query = breeze.EntityQuery
.from("Customers")
.expand("Orders")
.orderBy('FName, LName');
getSet(query, 'my.customers');
query = breeze.EntityQuery
.from("Items")
.orderBy('ItemID');
getSet(query, 'my.items');
query = breeze.EntityQuery
.from("Orders")
.expand("Details")
.orderBy('DropDate');
getSet(query, 'my.orders');
function getSet(query,setName) {
entityManager.executeQuery(query)
.then(function (data) {
var model = $parse(setName);
model.assign($scope, data.results);
})
.catch(failed)
.finally(refreshView);
}
.
当我用文件端踪时,我看到三个元数据首先返回,后跟三个查询。
编辑---------------------------------------------------------------
在查询解决问题之前预取元数据。现在,只有单一请求。
function getMetadata(manager) {
manager.fetchMetadata()
.then(getSets);
}
. 解决方案
我猜,你正在连续获得三个元数据,因为你同时开始了三个查询而不等待第一个完成。
微量内的第一个查询(或直接元数据获取)加载EntityManager的元数据。任何后续查询都不会提取元数据。
您在做什么,我认为,在第一个返回的元数据之前,请问微风在元数据之前执行多个查询。因为每个查询都在检查尚未从服务器返回的元数据中,所以每个查询都提交了自己的元数据获取请求。因此,三个元数据获取请求。
您可以通过预取Metadata,通过EntityManager.FetchmetAdata或通过提交第一个查询,然后提交第一个查询来避免此操作,然后您需要推迟任何其他查询,直到返回的承诺被解析。
不隶属于 StackOverflow