Рекомендуется , чтобы обернуть каждый вызов (индивидуальный или несколько вызовов) в транзакцию. Это помогает генерировать надежные результаты в случае многопоточной / многопроцессорной среды, когда другой поток / процесс изменяет данные, которые вы читаете. вызов также включает Чтение вызов.
Другая причина, по которой это рекомендуется, заключается в том, что современные СУБД всегда переносят каждый вызов в транзакции, если это еще не сделано. Это стоит. Лучше, если программист уже знает Единицу работы, эту стоимость можно сэкономить, а звонки можно сгруппировать гораздо лучше.
Но, в зависимости от сценария, это может быть необязательно для любого вызова (Создать, Читать, Обновить, Удалить). Это решение по каждому делу. Если вы избегаете этого по причине «код выглядит некрасиво», рассмотрите возможность реализации UoW.
Кстати, я надеюсь, что вы не звоните BuildSessionFactory
для каждого звонка. Это дорого и, что более важно, не нужно. Вместо этого позвоните при запуске приложения.
В ответ на комментарий:
Я имею в виду то же, что упомянуто в комментарии "Оскара Берггрена"; это просто недостаточно ясно. Поскольку вопрос больше касается транзакции, а UoW - это больше, чем просто транзакция, я предпочел просто «упомянуть» UoW, а не вдаваться в детали.
Со ссылкой на первый абзац, «множественные вызовы» могут быть заключены в одну единицу работы. Пожалуйста, поймите, что UoW на больше , чем транзакция. При использовании ORM, такого как NHibernate, использование UoW значительно улучшает использование транзакций. Также обратите внимание, что с полной версией ORM вам не нужно делать слишком много для реализации UoW. ISession
само по себе UoW. Вам просто нужно правильно управлять им.
Вам могут помочь следующие ответы:
https://stackoverflow.com/a/51781877/5779732
https://stackoverflow.com/a/50721461/5779732