0

在缓存中有一个实体,该实体具有前 20 个形式的相关实体。现在用户操作可以更新服务器上的前 20 个,因此我想重新下载整个实体。服务器发送前 20 名的正确数据,但在 Breeze 中,我最终得到前 40 名……而且我不知道如何避免这种行为。

谢谢你的提示

更新:我不使用 odata webapi 和 iqueryable,因为它为我的应用程序的客户端提供了太多的功能。所以我不想使用 EntityQuery.fromEntityKey,这似乎可以满足我的要求。我宁愿继续使用“正常”查询,我会在其中添加一个参数。

更新 2:为了更清楚地说明我为什么要阻止合并,当我重新计算前 20 个时,我删除了数据库中的所有相关条目并重新创建它们,因此它们具有新的 ID。所以我现在正在考虑更新,这可能实际上解决了我的问题,但我仍然想知道是否可以阻止合并。

4

2 回答 2

1

Breeze EntityManager 按主键缓存实体。因此,您的第二个查询可能会在每个查询中返回一组全新的实体。如果是这种情况,并且您真的只想要“最新的”20,那么最简单的解决方法是在每次查询之前简单地清空该实体类型的 EntityManager 缓存。就像是:

var entities = myEntityManager.getEntities(myEntityType);
entities.forEach(function(e) {
   myEntityManager.detachEntity(e);
   // or
   // e.entityAspect.setDetached();
});
于 2013-10-03T18:42:13.077 回答
0

我不确定你的问题到底是什么,但如果你想在实体查询上得到不同的结果,你可以通过创建 2 个具有不同操作名称的不同控制器来实现,或者只是使用不同的参数 - 重载方法。然后在您的数据上下文中,您可以有 2 个不同的查询。

您在查询中使用 .withParameters() 属性来调用带有参数的控制器方法。

然后在控制器方法中,您可以使用 LINQ 以任何您想要的方式进行查询和过滤。这样,您可以根据您选择调用的查询/控制器获得不同的结果。

文档:http ://www.breezejs.com/documentation/querying-depth

于 2013-10-02T09:34:04.463 回答