NHibernate в отключенных сценариях - PullRequest
6 голосов
/ 08 июня 2009

Какой у вас опыт использования последней версии NHibernate (2.0.1 GA) в отношении отключенных сценариев?

В отключенном сценарии я получаю некоторый граф объектов из NHibernate, отключаюсь от сеанса (и соединения с базой данных), делаю некоторые изменения в графе объектов (удаление в коллекциях, добавление сущностей, обновление сущностей), а затем снова соединяюсь и сохраняю. ...

Ответы [ 2 ]

4 голосов
/ 09 ноября 2009

Вы можете взглянуть на методы сеанса SaveOrUpdateCopy и Слияние .

Вот статья, которая дает вам более подробную информацию: Функция NHibernate: SaveOrUpdateCopy & Merge

4 голосов
/ 21 октября 2009

Мы попробовали это в архитектуре клиент-сервер. Теперь мы переходим к DTO (объектам передачи данных). Это означает, что отсоединенные сущности больше не отправляются напрямую клиенту, а являются специализированными объектами.

Основная причина для движения в этом направлении - не NHibernate, а фактически сериализация, необходимая для отправки сущностей клиенту. В то время как вы можете использовать отложенную загрузку (и вы это сделаете!), Пока вы подключены к сеансу, вам нужно получить все ссылки из базы данных для ее сериализации.

У нас было много направляющих вместо ссылок и множество свойств, которые сопоставлены, но не сериализованы ... и это стало болью. Поэтому гораздо проще скопировать материал, который вы действительно хотите сериализовать, в его собственную структуру.

Кроме того, работающий отряд мог бы хорошо работать.

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