Breeze - 如何在使用 expand() 时保留对 fkey 属性 的更改

Breeze - How to preserve changes to fkey property when using expand()

当查询扩展关联的导航 属性 时,Breeze 似乎正在恢复 fkey 属性 值——即使在使用 preserveChange 合并策略时也是如此。我们需要一种方法来保留所有更改。

步骤:修改缓存中实体的fkey 属性。使用 expand 从服务器查询相关的导航道具。当查询完成(数据合并)时,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 值)可能不再与子实体相关联。但是,这对我们来说很好。让父实体合并到缓存中,即使它不再与子实体关联。

无论这是一个 breeze 功能还是一个错误(IMO 这是一个错误),我怎样才能让 breeze 保留对 fkey 属性的更改?如果这是一个错误,您知道解决方法吗?如果它是一项功能,是否还有其他功能允许我在使用 expand() 的同时保留对 fkey 属性的更改?

使用最新版本:1.5.3 ...虽然在 1.4.11 中的行为相同。

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