Мне нужно делать меньшие SaveChanges за пределами области с расширенными возможностями SaveChanges, и я хочу иметь возможность сохранять меньшие транзакции независимо от более крупного. Пример: пользователь создает заказ с позициями. Типичная корзина для родителей и детей. Все объекты «order» создаются/сохраняются как 1 транзакция SaveChange. Пока пользователь находится на сайте, он может выбрать продукт и обозначить его как «любимый». В то время я хотел бы сохранить эту транзакцию в БД, полностью независимую от заказа (который может быть или не быть сохранен). Это будет случай для архитектуры mutli-manager? Или многофакторные тексты? Я не совсем уверен, какие различия между ними. Существует ли наилучшая практика для такого рода рабочих потоков? Если это имеет значение, я использую Durandal 2.0, и я следую шаблону проектирования singleton для моего объекта datacontext.breeze.js и независимые транзакции
ответ
Аргумент может быть ... возможно следует ... что ваш рабочий процесс не должен позволять пользователю одновременно любимый Product
и построить новый Order
и имеет оба изменения будут несохраненными и обменом те же EntityManager
. Это кажется мне неразумным.
Но Breeze поддерживает частичные сбережения («спасение вишни»), и вы можете воспользоваться этой функцией, если/когда у вас есть все основания для этого.
Первый параметр метода EntityManager.saveChanges
- это необязательный массив сущностей для сохранения, чтобы вы могли выбирать, какие объекты сохранять в транзакции.
Много способов построить этот набор. Нечто подобное для приложения KO может работать (осторожно: непроверенный)
function saveOrderById(order){
// get the order's items with pending changes
var itemsWithChanges = order.orderItems().filter(
function(item) { return item.entityAspect.isAddedModifiedOrDeleted()});
// concatenate with the order itself (you may have a concurrency property to set, btw)
var savables = itemsWithChanges.concat(order)
return order.entityAspect.entityManager.saveChanges(savables); // returns the promise
}
заносить в избранное в Product
не будет частью этой сделки и будет оставаться в ожидании изменения в кэше.
БУДЬТЕ ОСТОРОЖНЫ
Когда вишня сбор, вы в опасности опуская сущность-с-изменения, которые должны быть частью сделки.
Например, пример (возможно, плохой пример), один из новых элементов заказа может ссылаться на новый Product
, который вы еще не сохранили.
Это плохой пример, потому что ваш пользовательский интерфейс, вероятно, не должен работать таким образом. Я не поклонник добавления Product
и его использования в Order
в одно и то же время или даже в том же рабочем процессе. Если вы пробовали такую вещь, я бы хотел подумать, что сервер выбросит исключение ссылочной целостности.
Но вы видите мою мысль, не так ли? Вы должны быть уверены, что в вашем сохранении есть все необходимое.
- 1. начать две независимые транзакции с mysql
- 2. Breeze.js и WebPack
- 3. Breeze.js WebApi OData и Durandal
- 4. Знаки Breeze.js и TimeSpan ISO
- 5. Независимые операции в Spring JDBC
- 6. EF7 и breeze.js - пакетный и сберегательный заказ
- 7. Vaadin и независимые события JavaScript
- 8. Независимые договорные и неконкурентные оговорки?
- 9. Отдельные и независимые модульные тесты
- 10. Независимые переменные и производительность массива
- 11. Независимые узлы
- 12. Независимые аргументы
- 13. Breeze.js 1.53 возможно нарушение изменений от Breeze.js 1.5.1
- 14. Breeze.js Node.js mongoose?
- 15. PUT звонки с Breeze.js
- 16. breeze.js & SharePoint 2013
- 17. Breeze.js: Обработка пустых результатов
- 18. Breeze.js + Knockout.js Tutorials
- 19. breeze.js plain old sql
- 20. Breeze.js синтаксический анализ XHR.responseText
- 21. Breeze.js OData v4 Ошибка
- 22. breeze.js - как связаны версии клиента и сервера
- 23. Работа с breeze.js и несколькими источниками данных
- 24. breeze.js и наблюдаемые массивы, 2 копии данных?
- 25. Серверная сторона Валидации и безопасность в breeze.js
- 26. Breeze.js и Tasypie: Обработка API OData
- 27. Breeze.js и knockout.js применяются во второй раз
- 28. Самостоятельно ссылок объектов и Breeze.js SaveChanges
- 29. Breeze.js loadNavigationProperty с расширением
- 30. поиска текста в breeze.js
Мне действительно не нравится идея выбора вишни. Я бы хотел, чтобы он был изолирован. Я вижу, что это используется во многих местах. Предположим, у пользователя есть несохраненная корзина покупок, но перед проверкой им нужно зайти в свой профиль клиента и обновить свой адрес электронной почты, информацию CC и т. Д. Они должны иметь возможность обновлять данные своего профиля, оставляя корзину в нетронутом виде, а после обновляя профиль, который они могут продолжать делать. (Данные профиля фиксируются). Пользователь может никогда не выполнить заказ. Я читал о нескольких менеджерах. Будет ли это работать, или вишня выбирает единственный вариант? спасибо – mwill
** Несколько менеджеров определенно работают ** и, по сути, ** являются предпочтительными **. Я просто говорю, что частичные сбережения доступны, если они вам понадобятся. Обратите внимание: убедитесь, что ваши менеджеры используют один и тот же «metadataStore», поэтому вы не делаете избыточные серверные поездки для метаданных.См. ['EntityManager.createEmptyCopy'] (http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#method_createEmptyCopy) – Ward