【发布时间】:2015-05-08 05:25:19
【问题描述】:
当查询扩展关联的导航属性时,Breeze 似乎正在恢复 fkey 属性值——即使使用 preserveChange 合并策略也是如此。我们需要一种方法来保存所有更改。
步骤:修改缓存中实体的 fkey 属性。使用 expand 从服务器查询相关的 nav 道具。当查询完成(数据合并)时,fkey 属性值为保存的值(已还原)。
为了演示这个问题,我运行了以下代码片段两次。第一次加载缓存并将entities[0].ProjectAreaRef从1修改为48。第二次执行相同的查询以测试合并。在第二次查询 orig 为 48 且 val 为 1 之后。缓存实体中的更改被覆盖。
var query = new breeze.EntityQuery().from('Issue');
query = query.expand('oProjectArea');
entityManager.executeQuery(query).then(function (x) {
var entities = x.results;
var val = entities[0].ProjectAreaRef;
if (orig && val !== orig)
console.log('orig:' + orig + ' val:' + val);
entities[0].ProjectAreaRef = 48;
我想有人可能会说扩展为导航道具是要求刷新关系。否则,检索到的父实体(基于服务器上的 fkey 值)可能不再与子实体关联。但是,这对我们来说很好。让父实体合并到缓存中,即使它不再与子实体关联。
不管这是一个微风功能还是一个错误(IMO 这是一个错误),我怎样才能让微风保留对 fkey 属性的更改?如果是错误,您知道解决方法吗?如果它是一项功能,是否还有其他功能允许我在使用 expand() 的同时保留对 fkey 属性的更改?
使用最新版本:1.5.3 ...尽管在 1.4.11 中的行为相同。
【问题讨论】:
-
你在哪里设置'preserveChanges'?尝试使用 query = query.using(MergeStrategy.PreserveChanges);
-
其实
preserveChanges是默认的。你还摸它吗?同时,我们将在这里尝试快速重现 -
谢谢大家...是的,使用默认合并策略...preserveChanges。非 fkey 属性更改按预期保留。
-
复制。缺陷跟踪 D2676。我想不出一个好的通用解决方法。如果你知道会有问题,你可以补偿,但是YUCK
标签: breeze