Как управлять временем сеанса / транзакции для обработки многих объектов - PullRequest
1 голос
/ 09 марта 2011

В проекте, над которым работает моя команда, есть служба Windows, которая перебирает все сущности в определенной таблице и обновляет некоторые из их полей на основе определенных нами правил. Мы используем NHibernate в качестве нашего инструмента ORM. В настоящее время мы открываем один сеанс и одну транзакцию для всего процесса, что означает, что транзакция фиксируется после того, как все объекты были обработаны. Я думаю, что этот подход не очень хорош, и я хотел бы услышать еще несколько мнений: Должны ли мы сохранить наш текущий способ управления сессией, или должны перейти к другому подходу?

Один вариант, о котором я подумал, - это открытие транзакции для каждой сущности, а другое предложение - открыть новую сессию для каждой сущности. Какой подход, по вашему мнению, будет работать лучше всего?

1 Ответ

2 голосов
/ 09 марта 2011

Нет единственного способа сделать это; все зависит от конкретных случаев.

В приложении, над которым я работаю, у меня есть примеры трех подходов, и есть причина для выбора каждого. Например:

  • Весь процесс должен иметь транзакционную атомарность: использовать одну транзакцию
  • Процесс имеет много общих данных, но каждая запись в «основной» таблице может считаться единицей работы: использовать один сеанс, несколько транзакций
  • Обработка каждой записи в основной таблице должна быть независимой от других (включая обработку ошибок): используйте сеанс для каждой записи
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...