vm.alterExistingSortOrder = function () {
$.each(vm.M1010DxCodeSorterListBox2(), function (index1, value1) {
if (vm.M1010DxCodeSorterListBox2()[index1].IsNewDxCode == false)
{
return datacontext.fetchEntity("EpisodeDxM00Rel", vm.M1010DxCodeSorterListBox2()[index1].Id).then(function (result) {
var episodeDxM00RelEntity = result.entity;
episodeDxM00RelEntity.SortOrder(index1);
vm.save();
});
}
});
$.each(vm.M1016DxCodeSorterListBox2(), function (index2, value2) {
if (vm.M1016DxCodeSorterListBox2()[index2].IsNewDxCode == false)
{
return datacontext.fetchEntity("EpisodeDxM00Rel", vm.M1016DxCodeSorterListBox2()[index2].Id).then(function (result) {
var episodeDxM00RelEntity = result.entity;
episodeDxM00RelEntity.SortOrder(index2);
vm.save();
});
}
});
};
我有一个函数,其中我有8个for循环(在代码示例中我只显示2个循环)。我在该循环中获取实体,并更改其中一个属性。理想情况下,我想将所有实体保存在一起,而不是一个接一个地保存,我目前正在做,这给了我并发保存错误,但我不知道如何将所有这些修改过的实体保存在一起(我应该在哪里写一个保存方法调用,考虑到fetchEntity方法返回了多个promise)
答案 0 :(得分:2)
Breeze确实支持并发保存,但您需要通过 SaveOptions 类明确启用此功能:http://www.breezejs.com/sites/all/apidocs/classes/SaveOptions.html
myEntityManager.saveOptions = new SaveOptions({ allowConcurrentSaves: true });
myEntityManager.saveChanges().then(...);
也就是说,重构/重写代码可能更有意义,这样您就可以使用多个实体执行单个保存。查看Q.all方法(https://github.com/kriskowal/q),了解如何编写在执行所有提取后执行的保存承诺。