2

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

这是测试:

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);
});
4

1 回答 1

1

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

下面是旧帖

感谢您的复制,它真的很有帮助。这里有一个错误,它可能会在今天晚些时候或明天早些时候的下一个版本中修复。

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

不过还有两个问题。

首先,您可以替换此行

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

有了这个

 var cust = data.results[0];

因为 Breeze 会自动从查询返回的任何实体中创建 ko observables。

第二次调用 saveChanges

  realEm.saveChanges();
  ok(realEm.hasChanges() === false);

需要转换为承诺,因为 saveChanges 是异步的。

  realEm.saveChanges().then(function(r) { 
      ok(realEm.hasChanges() === false);
  }
于 2013-01-25T18:16:40.743 回答