0

当数据来自缓存而不是服务器时,将 inlineCount 添加到结果集中是否有意义?

我将计数存储在本地,所以只要不离开当前 url(我使用 angularjs),我就可以从控制器中的变量中获取它。但是一旦我离开了那个 url,如果我回到它,数据仍然会来自缓存,但是我的局部变量被重置为初始值。

4

1 回答 1

2

2015 年 3 月 12 日更新

必要的更改已经提交,应该会发布下一个版本(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');
  }

2014 年 5 月 9 日更新

经过更多的思考,我决定你们都是对的,我错了。我已经在我们的内部跟踪系统中输入了功能请求 #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值。仅当查询远程时才重置计数的绑定副本。

于 2013-06-05T18:46:52.777 回答