当数据来自缓存而不是服务器时,将inlineCount添加到结果集是否有意义?
我在本地存储计数,所以只要不离开当前网址(我使用angularjs),我就可以从控制器中的变量中获取它。但是一旦我离开了这个网址,如果我回到它,数据仍将来自缓存,但我的本地变量将重置为初始值。
答案 0 :(得分:2)
已经提交了必要的更改,并且应该在下一个版本(1.5.3之后)发布。
当然,inlineCount
仅在异步查询执行中可用。
同步
em.executeQueryLocally(query)
会立即返回分页结果数组;没有地方可以容纳inlineCount
。
以下是DocCode.queryTests中新的相应测试的摘录:" can page queried customers in cache with inline count"
var query = EntityQuery.from('Customers')
.where('CompanyName', 'startsWith', 'A')
.orderBy('CompanyName')
.skip(2).take(2)
.inlineCount()
.using(breeze.FetchStrategy.FromLocalCache);
return em.executeQuery(query)
.then(localQuerySucceeded);
function localQuerySucceeded(data) {
var custs = data.results;
var count = custs.length;
equal(count, 2,
"have full page of cached 'A' customers now; count = " + count);
var inlineCount = data.inlineCount;
ok(inlineCount && inlineCount > 2,
'have inlineCount=' + inlineCount + ' which is greater than page size');
}
经过多次思考后,我确定你们都是对的,我错了。我在内部跟踪系统中输入了功能请求#2267。没有承诺我们何时完成它(我很快就相信);留在我们身上。
我认为支持inlineCount
缓存查询是有意义的,因为Breeze无法计算该值。
和我一起走过去。您使用内联计数和页面大小为5项向服务器发出分页查询。
// Get the first 5 Products beginning with 'C' // and also get the total of all products beginning with 'C' var query = EntityQuery.from("Products") .where("ProductName", "startsWith", "C") .take(5) .inlineCount() .using(manager);
假设你运行一次,服务器报告有142' C'数据库中的客户。
好的,现在采取相同的查询并在本地执行:
query.using(FetchStrategy.FromLocalCache).execute().then(...).fail(...);
Breeze怎么会知道伯爵?它只在缓存中有5个实体。怎么知道有142个C'客户在数据库中?它不能。
我认为您最好的选择是检查返回的数据对象,看它是否具有inlineCount
值。如果查询是远程的,则仅重置计数的绑定副本。