【问题标题】:Breeze - How to preserve changes to fkey property when using expand()Breeze - 如何在使用 expand() 时保留对 fkey 属性的更改
【发布时间】: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


【解决方案1】:

好的,这是一个错误,现已在最新的 GitHub 存储库中修复。此修复也将在 v 1.5.5 中发布(下个月某个时候)。不错的收获!

【讨论】:

  • 我从 github 下载了它,它运行良好——这个修复和自 1.5.3 以来的任何其他更改。感谢您的快速回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多