我认为当您将子实体添加到另一个实体然后将子实体标记为已删除时(我之前未保存更改),我发现了一个错误。
以下是测试:
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);
});
答案 0 :(得分:1)
截至breeze v1.0.0,此错误现已修复。抱歉延迟
感谢repro,真的很有帮助。这里有一个错误,它将在今天晚些时候或明天早些时候在下一个版本中修复。
要明确的问题是'setDeleted'调用后的'hasChanges'调用应该返回false,但是当前返回true。原因是删除“添加”记录只是将实体与entityManager分离;因此将entityManager恢复到'add'之前的状态。分离确实发生,但在这种情况下hasChanges功能被破坏。
其他两个问题。
首先,您可以替换此行
var cust = ko.observable(data.results[0]);
用这个
var cust = data.results[0];
因为Breeze会自动从查询返回的任何实体中创建ko observable。
并且第二次调用saveChanges
realEm.saveChanges();
ok(realEm.hasChanges() === false);
需要转换为promise,因为saveChanges是异步的。
realEm.saveChanges().then(function(r) {
ok(realEm.hasChanges() === false);
}