Одновременное сохранение не допускается: ошибка ветерка

  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 для циклов (в примере кода я просто показываю 2 цикла). Я выбираю сущность в этом цикле и изменяю одно из его свойств. В идеале я хочу сохранить все сущности вместе вместо того, чтобы сохранять одну за другой, что я сейчас делаю, и это дает мне параллельную ошибку сохранения, но я не уверен, как я могу сохранить все эти измененные сущности вместе (где я должен написать одно сохранение вызов метода, учитывая, что методы fetchEntity возвращают несколько обещаний)

1 ответ

Решение

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), чтобы узнать, как составить обещание сохранения, которое будет выполнено после ВСЕХ ваших выборок.

Другие вопросы по тегам