当数据来自缓存而不是服务器时,将 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值。仅当查询远程时才重置计数的绑定副本。