Breeze 删除未保存的实体时出现错误

Breeze 删除未保存的实体时出现错误,breeze,Breeze,我想当您将一个子实体添加到另一个实体,然后将该子实体标记为已删除(之前未保存更改)时,我发现了一个错误 以下是测试: test("delete unsaved entity", 1, function () { var realEm = newEm(); //ok(realEm.hasChanges() === false, "The entity manager must not have changes"); var query = EntityQuery.from(

我想当您将一个子实体添加到另一个实体,然后将该子实体标记为已删除(之前未保存更改)时,我发现了一个错误

以下是测试:

test("delete unsaved entity", 1, function () {
    var realEm = newEm();
    //ok(realEm.hasChanges() === false, "The entity manager must not have changes");
    var query = EntityQuery.from("Customers")
        .where("CustomerID", "==", "729de505-ea6d-4cdf-89f6-0360ad37bde7")
        .expand("Orders");
    stop();
    realEm.executeQuery(query)
        .then(function (data) {
            var cust = ko.observable(data.results[0]);
            var newOrder = realEm.createEntity("Order", {}, breeze.EntityState.Detached);
            cust().Orders.push(newOrder);
            //ok(newOrder.entityAspect.entityState.isAdded() === true, "The entity is Added");
            newOrder.entityAspect.setDeleted();
            //ok(realEm.hasChanges() === true, "The entity manager must have changes? Not clear to me but it's true");
            realEm.saveChanges();
            ok(realEm.hasChanges() === false, "The entity manager must not have changes");
        })
    .fin(start);
});

从breeze v1.0.0开始,此错误现已修复。抱歉耽搁了

下面是老帖子 谢谢你的修改,它真的很有帮助。这里有一个bug,可能会在今天晚些时候或明天早些时候的下一个版本中修复


需要澄清的是,“setDeleted”调用之后的“hasChanges”调用应该返回false,但当前返回true。原因是删除“添加的”记录只会将实体与entityManager分离;因此,将entityManager恢复到“添加”之前的状态。分离确实会发生,但在这种情况下,hasChanges函数被破坏

不过还有两个问题

首先,你可以更换这一行

 var cust = ko.observable(data.results[0]);
用这个

 var cust = data.results[0];
因为Breeze将从查询返回的任何实体中自动创建ko可观察对象

然后再调用saveChanges

  realEm.saveChanges();
  ok(realEm.hasChanges() === false);
需要转换为承诺,因为saveChanges是异步的

  realEm.saveChanges().then(function(r) { 
      ok(realEm.hasChanges() === false);
  }

这个用例是什么?最好将此问题转移到GitHub项目中的一个问题,而不是堆栈溢出问题。用例可能是:将订单行添加到订单中,并在保存前单击图标删除一行。我来填一个问题。Thx.需要澄清的是,“setDeleted”调用之后的“hasChanges”调用应该返回false