当数据来自缓存而不是服务器时,将 inlineCount 添加到结果集中是否有意义?
我将计数存储在本地,所以只要不离开当前 url(我使用 angularjs),我就可以从控制器中的变量中获取它。但是一旦我离开了那个 url,如果我回到它,数据仍然会来自缓存,但是我的局部变量被重置为初始值。
当数据来自缓存而不是服务器时,将 inlineCount 添加到结果集中是否有意义?
我将计数存储在本地,所以只要不离开当前 url(我使用 angularjs),我就可以从控制器中的变量中获取它。但是一旦我离开了那个 url,如果我回到它,数据仍然会来自缓存,但是我的局部变量被重置为初始值。
必要的更改已经提交,应该会发布下一个版本(1.5.3 之后)。
当然,inlineCount
仅在异步查询执行中可用。
同步
em.executeQueryLocally(query)
立即返回分页结果数组;没地方放inlineCount
。
这是 DocCode.queryTests 中新的相应测试的摘录:“可以使用内联计数在缓存中分页查询的客户”
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 个项目向服务器发出分页查询。
// 获取以 'C' 开头的前 5 个产品 // 并且还得到所有以'C'开头的产品的总数 var query = EntityQuery.from("Products") .where("ProductName", "startsWith", "C") .take(5) .inlineCount() .使用(经理);
假设您运行一次,服务器报告数据库中有 142 个“C”客户。
好的,现在采用相同的查询并在本地执行它:
query.using(FetchStrategy.FromLocalCache).execute().then(...).fail(...);
Breeze 应该如何知道计数?它在缓存中只有 5 个实体。它如何知道数据库中有 142 个“C”客户?它不能。
我认为您最好的选择是检查返回的数据对象以查看它是否具有inlineCount
值。仅当查询远程时才重置计数的绑定副本。