сеанс с несколькими запросами: ударил ли база данных несколько раз? - PullRequest
0 голосов
/ 05 января 2012

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

Ответы [ 3 ]

4 голосов
/ 05 января 2012

С помощью NHibernate вы можете использовать Future, а это можно сделать всего за один раз (если это поддерживает драйвер базы данных).

Session.QueryOver<Food>().Where(x => x.IsGood).Future<Food>();
Session.QueryOver<Product>().Where(x => x.IsCheap).Future<Product>();

Оба будут выполнены только в оба конца в БД.

Подробнее о будущем здесь и здесь

1 голос
/ 05 января 2012

Сеанс не зафиксирован, но транзакции выполнены.Сеанс является оберткой соединения с базой данных (а с точки зрения NHibernate он делает еще больше) и должен быть недолгим.Когда вы запускаете операцию чтения или записи через NHibernate, она, конечно, отправляется в базу данных, поскольку вам нужен результат синхронизации.Когда операция записи выполняется из кода, она также немедленно отправляется в БД.Если эта операция фиксируется в конце, зависит от того, выполняется ли она в транзакции.

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

1 голос
/ 05 января 2012

В большинстве случаев будет 10 поездок туда и обратно. Обновления объектов модели можно оставить для фиксации, но не для выбора. Это связано с тем, что результаты выбора должны быть доступны сразу после возврата запроса. Фактически, если происходит какая-либо отложенная загрузка, сеанс должен оставаться открытым, чтобы отложенные поля могли заполняться последующими запросами.

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