微风:如何防止合并发生

时间:2013-10-02 04:30:47

标签: breeze

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

感谢您的提示

更新:我不使用odata webapi和iqueryable,因为它为我的应用程序提供了太多的客户端功能。所以我不想使用EntityQuery.fromEntityKey,这似乎做我想要的。我更喜欢继续使用“普通”查询,我添加了一个参数。

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

2 个答案:

答案 0 :(得分:1)

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

var entities = myEntityManager.getEntities(myEntityType);
entities.forEach(function(e) {
   myEntityManager.detachEntity(e);
   // or
   // e.entityAspect.setDetached();
});

答案 1 :(得分:0)

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

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

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

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