NHibernate: Что такое детские сеансы и почему и когда я должен их использовать? - PullRequest
5 голосов
/ 15 января 2011

В комментариях к блогу ayende * об аудите в NHibernate есть упоминание о необходимости использования дочернего сеанса : session.GetSession(EntityMode.Poco).

Насколько я понимаю, это как-то связано с порядком выполнения операции SQL, которую будет генерировать session.Flush. (Например: если я хотел выполнить какую-либо операцию удаления в событии предварительной вставки, но сеанс уже был завершен с операциями удаления, мне понадобится какой-нибудь способ их вставить.)

Однако я не нашел документации об этой функции и поведении.

Вопросы:

  • Правильно ли мое понимание дочерних сессий?

  • Как и в каких сценариях я должен их использовать?

  • Они где-то задокументированы?

  • Могут ли онибудет использоваться для определения объема сеанса?
    (Например: я открываю основной сеанс, который будет содержать некоторые данные, а затем создаю 2 дочерних сеанса из основного. Я ожидаю, что два дочерних сеансаобласти видимости будут разделены, но будут совместно использовать объекты из основного кэша сеанса. Так ли это?)

  • Являются ли они первоклассными гражданами в NHibernate или просто взломаны для поддержкинекоторые крайние случаи?

Заранее спасибо за любую информацию.

1 Ответ

0 голосов
/ 29 ноября 2011

Stefando,

NHibernate не знает о дочерних сеансах, вы можете повторно использовать существующий или открыть новый.

Например, вы получите исключение, если попытаетесь загрузить одну и ту же сущность в две разные сессии.

Причина, по которой она упоминается в блоге, заключается в том, что в preupdate и preinsertвы не можете загрузить больше объектов в сеансе, вы можете изменить уже загруженный экземпляр, но вы не можете, например, перейти к свойству отношения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...